4

emacsで次のコードをすばやく書くにはどうすればよいですか?

\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 を \newcommand{\cA}{\mathcal A} に変更)

4

9 に答える 9

7

キーボード マクロが最も速く結果を取得することに同意します。

もっと楽しいのは、プログラムによるアプローチです。

(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")))
于 2009-01-05T17:03:43.870 に答える
5

一般に、この種の問題に初めて直面する場合は、JB が既に述べたように、キーボード マクロを使用します。

2 回目は、Steve Yeggeによる非常に興味深い記事http://steve-yegge.blogspot.com/2006/06/shiny-and-new-emacs-22.htmlをチェックしてください。あなたの。

あなたの便宜と私自身の照明のために、私は実際に先に進んでテストしました:

私はから始めます

あ
...
あ

26回

そして、

Mx 置換正規表現

あ
\\newcommand{\\c\,(string (+ ?A \#))}{\\mathcal \,(string (+ ?A \#))}
于 2009-01-05T17:20:18.063 に答える
4

AからZはわずか26行です。キーボードマクロを自然に使用するよりも、生成の自動化に多くの時間を浪費することになります。

于 2009-01-05T16:38:39.333 に答える
3

長方形の選択を知っていますか?

もありますstring-rectangle

  • テキストの先頭にポイント(カーソル)を置き、マーク(C-SPC
  • 最後の行の先頭にポイントを配置します
  • タイプM-x string-rectangle
  • 文字列を入力します(\ newcommand {\ c)

これにより、マーク以降の各行の前にその文字列が挿入されます。

于 2009-01-06T12:01:51.810 に答える
3

コメントするほどのカルマなどはありませんが、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")))

まず、Emacs Lisp には char のリーダー構文があります。の代わりに(string-to-char "X")、単に書くことができます?X。次に、 andのformat代わりにprintf スタイルを使用して、最終結果を生成できます。char-to-stringconcat

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

M-:これで、プロンプトを考えずに入力できるほど簡潔になりました。

これが実際にTeXである場合、TeXにもマクロがあることを指摘します。

編集: ジョー・カサドンテへのもう 1 つのスタイルのアドバイス。(incf foo)よりもはるかに簡単に入力でき(setq foo (+ foo 1))ます。

于 2009-01-09T07:16:50.027 に答える
3

それはあなたの背景に依存します。次のように入力M-!します。

perl -e"print map {q(\newcommand{\c).$_.q(}{\mathcal ).qq($_}\n)} A..Z
于 2009-01-05T17:35:15.490 に答える
1

または、一度に 1 つずつ実行する場合はインタラクティブな方法

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

テキストが必要なときはいつでも eval と Mx somefun だけ

于 2009-01-05T17:17:58.100 に答える
1

正確な答えではありません。

emacs や vim を使用していない人のために、Excel を開いてその自動入力機能とテキスト連結機能を使用してそのようなコードを生成できることを付け加えておきます。

于 2009-02-25T19:03:46.007 に答える
0

私は 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)))))

2つを組み合わせるのはそれほど難しいことではありません。

于 2009-01-05T17:11:18.517 に答える