2

完全な Emacs 初心者がここにいます。そのため、現在、Emacs でかなり大きな LaTeX プロジェクトに取り組んでおり、makeidx パッケージを使用して、いくつかの単語にインデックスを付ける必要がある場所がいくつかあります。索引付けされた単語も太字にしたかったので\ind{}、引数を太字にして索引付けする独自のコマンドを作成しました。しかし、今はこのコマンドに不満があるので\ind{whatever}、テキスト内ののすべてのインスタンスを\textbf{whatever}\index{whatever by default}.

問題は、私が欲しいものを正確に知っているということです:

  1. テキストを調べて、のインスタンスを探し、使用して\ind{置き換えます\textbf{search-and-replace
  2. \ind(この場合は「whatever」)の引数をメモリに保存します
  3. の引数がどうあるべきかをユーザーに尋ねてください\index。デフォルトでは (Enter を押して) 最初の引数にする必要がありますが、考えを変えて別のものを入力することもできます (この場合は「デフォルトで何でも」)。" "入力がない場合 (たとえばスペースのみ)、プログラムを停止します。
  4. \index{、新しい引数、およびを書き留めます}
  5. テキスト内の次の出現箇所に移動します。

しかし、残念ながら、これを達成する方法がわからないので、誰かの助けが必要です。そのようなことを行う方法を説明するのに時間がかかりすぎる場合は、独自の関数を作成するためのチュートリアルを送っていただけませんか?

申し訳ありませんが、ご理解のほどよろしくお願いいたします。

4

3 に答える 3

6

このアプローチは、私には漠然と非正統に思えますが、機能し、1回限りの仕事には十分に思えます...

replace-regexpand query-replace-regexp( )の置換テキストでC-M-%は、新しいエスケープ シーケンスの 1 つが です\,(...)。ここで、...任意の Lisp 式を指定できます。read-from-minibufferオプションのデフォルトで、ユーザーが入力した任意のテキストを読み取るLisp 関数があります。したがって:

C-M-%: 開始しquery-replace-regexpます。

\\ind{\([^}]+?\)}: 検索するパターン。

\\textbf{\1}\\index{\,(read-from-minibuffer "index content? " \1)}: 置換テキスト。\index{}ユーザーは、要素に続く中かっこの間の元のテキストをデフォルトとして使用して、要素に続く中かっこに入れるテキストを求められ\ind{}ます。

query-replace-regexpを使用する場合は、各選択の後に入力して、各選択を確認する必要があることに注意してくださいyM-x replace-regexpこの手順を避けたい場合に使用します。

于 2011-03-21T03:52:13.150 に答える
3

Vladはあなたの問題に対するLaTeXの答えをあなたに与えます。Emacsソリューションが重要です-マクロ:

C-x (

新しいマクロを定義するには、次のように変更の1つのステップを実行します。

C-s \ind{
<left>ex

次に、引数をコピーして\textbfマクロに貼り付けます...繰り返し可能な方法で移動するように注意する必要があります。標準の変更が完了したら、カーソルをとの後に置き、次のようにしwhatever by defaultて定義を終了します。

C-x )

これC-x eで、定義したマクロが呼び出され、カーソルを正しい場所に置いて、変更する部分を変更できます。を繰り返して、e一度に複数回マクロを呼び出すこともできます。

于 2011-03-21T02:48:53.787 に答える
3

\indオプションの引数を取得できるように、を再定義しないのはなぜですか?

例えば:

\newcommand{\ind}[2][]{%
  \def\first{#1}%
  \ifx\first\empty
     \textbf{#2}\index{#2}%
  \else
     \textbf{#2}\index{#1}%
  \fi
}

このように、\ind{whatever}またはを使用できます\ind[whatever-else]{whatever}

于 2011-03-21T00:52:51.747 に答える