سؤال

كيف يمكنني كتابة الكود التالي بسرعة في إيماكس؟

\newcommand{\cA}{\mathcal A}
\newcommand{\cB}{\mathcal B}
\newcommand{\cC}{\mathcal C}
...
...
\newcommand{\cY}{\mathcal Y}
\newcommand{\cZ}{\mathcal Z}

هل هناك طريقة أسرع من الكتابة؟

A
B
C
D
.
.
.
Y
Z

ثم القيام بماكرو على كل سطر؟(تغيير A إلى ewcommand{\cA}{\mathcal A})

هل كانت مفيدة؟

المحلول

في عام، وهي المرة الأولى كنت تواجه هذا النوع من المشاكل، وكنت استخدام وحدات الماكرو لوحة المفاتيح، كما قال JB بالفعل.

والمرة الثانية، وتحقق من هذه المادة جدا مثيرة جدا للاهتمام من قبل ستيف ييغج: <لأ href = "http://steve-yegge.blogspot.com/2006/06/shiny-and-new-emacs-22.html "يختلط =" نوفولو noreferrer "> http://steve-yegge.blogspot.com/2006/06/shiny-and-new-emacs-22.html ، الذي يحتوي على حلول للمشاكل بالضبط مثل لك.

لراحتك، وبلدي الإضاءة الخاصة، وأنا فعلا ذهبت إلى الأمام واختباره:

وأود أن تبدأ مع

A
...
A

و26 مرة

ووالقيام

وM-س-استبدال التعبير العادي

A
\\newcommand{\\c\,(string (+ ?A \#))}{\\mathcal \,(string (+ ?A \#))}

نصائح أخرى

وأوافق على أن ماكرو لوحة المفاتيح سوف تحصل على نتيجة أسرع.

وأكثر متعة هو نهج برنامجي:

(loop 
      for n from (string-to-char "A") to (string-to-char "Z")
      for c = (char-to-string n)
      do (insert (concat "\\newcommand{\\c" c "}{\\mathcal " c "}\n")))

وA إلى Z هو فقط 26 سطرا. وكنت تضيع المزيد من الوقت جيل أتمتة من مجرد الطبيعي باستخدام وحدات الماكرو لوحة المفاتيح، إيمهو.

وذلك يعتمد على الخلفية الخاصة بك. كنت اكتب فقط M-! و:

perl -e"print map {q(\newcommand{\c).$_.q(}{\mathcal ).qq($_}\n)} A..Z

هل تعرف اختيار المستطيل ?

هناك ايضا string-rectangle:

  • ضع النقطة (المؤشر) في بداية النص، ضع علامة (C-SPC)
  • ضع نقطة في بداية السطر الأخير
  • يكتب M-x string-rectangle
  • اكتب سلسلة ( ewcommand{\c)

سيؤدي هذا إلى إدراج تلك السلسلة قبل كل سطر منذ العلامة.

وأنا لم يكن لديك ما يكفي من الكرمة أو أيا كان أن أعلق، ولكن أردت أن تحسين اسلوب HD لبعض الشيء.

وهنا الأصلي:

(loop 
  for n from (string-to-char "A") to (string-to-char "Z")
  for c = (char-to-string n)
  do (insert (concat "\\newcommand{\\c" c "}{\\mathcal " c "}\n")))

أولا، إيماكس اللثغة بناء جملة القارئ للحرف. بدلا من (string-to-char "X")، يمكنك فقط إرسال ?X. بعد ذلك، يمكنك استخدام format على غرار printf بدلا من char-to-string وconcat لإنتاج النتيجة النهائية:

(loop for n from ?A to ?Z
      do (insert (format "\\newcommand{\\c%s}{\\mathcal %s}\n" n n)))

والآن حان موجزة بما فيه الكفاية لكتابة دون التفكير في موجه M-:.

وسوف نشير أيضا إلى أن تكس لديها وحدات الماكرو أيضا، إذا كان هذا هو في الواقع تكس.

وتحرير: الشيء الآخر المشورة نمط جو Casadonte. (incf foo) هو أسهل بكثير لكتابة من (setq foo (+ foo 1)).

وأو الطريقة التفاعلية إذا كنت ترغب في القيام بها في وقت واحد

(defun somefun(inputval)
  (interactive "sInputVal: ")
  (insert ( format "\\newcommand{\\c%s}{\\mathcal %s}" inputval inputval) )
)

ومجرد وحدة التقييم وM-س somefun في كل مرة تريد النص

وليس بالضبط جوابا.

وبالنسبة للأشخاص الذين لا يستخدمون ايماكس أو همة، أود أن أضيف أن تتمكن من فتح Excel و استخدام ميزة التدوين الآلي وسلسلة النص وظيفتها لتوليد هذه المدونة.

وأنا أحب حلقة HD بشكل أفضل قليلا من الألغام، ولكن هنا بديل، نهج أكثر عمومية:

(defun my-append (str)
  "Substitute A-Z in STR and insert into current buffer.

Looks for '--HERE--' (without quotes) in string STR, substitutes the
letters A-Z in the string and then inserts the resulting string into
the current buffer."
  (interactive "sInput String: ")
  (let ((lcv 0)
        letter newstr)
    (while (< lcv 26)
      (setq letter (+ ?A lcv))

      (insert (replace-regexp-in-string "--HERE--" (char-to-string letter) str t t) "\n")

      (setq lcv (+ lcv 1)))))

ويجب أن لا يكون من الصعب جدا أن الجمع بين الأمرين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top