インデックス作成を支援するコマンド

インデックス作成を支援するコマンド

論文、レポート、書籍などの大きなテキストをインデックスする簡単な方法が欲しいです。ここでは、それを自動的に行う魔法のツールを求める投稿がたくさんありました。コメントから私が理解した限りでは、誰も機械がそのようなことをできるとは思っていません。重要私たちのためのタスク。

したがって、インデックス作成作業を容易にする最善の解決策は、適切な個人用コマンドを作成することだと思います (今のところ、私はそれが得意ではありません...)。少なくとも次のことを行いたいと思います。

  1. テキスト内のインデックスされた単語を印刷する方法を用意する(つまり、2回入力するのを避ける)

    (some text) word \index{word} ...
    

    \self以下のようにコマンドを定義すると、必要なものが得られます。

    \DeclareRobustCommand{\self}[1]{{#1}\index{#1}} %solves 1 
    
  2. 複数回繰り返されるインデックス付き単語内のエントリのコマンドを定義します。例: 「単語」の繰り返しを避けます

    \index{word! entry1}, \index{word! entry1}, \index{word! entry1}...
    

以下のコマンド\subで作成できます。

    \DeclareRobustCommand{\sub}[1]{\texttt{#1}\index{Set subordinate!#1}} %solves2
  1. 2 と同じですが、今度はコマンドはテキストの一部に変数定義を使用する必要があります (前の固定の「単語」を置き換えるため)。これは可能ですか? 以下の例内の「特別な」セクションの試行を参照してください。

  2. \splexインデックス ( ) エントリ (n変数 ) を複数に分割するコマンドですか\index{}?たとえばmakeindex、 を使用するときにすべてのエントリが同じ行に印刷されるのを回避するためです\index{Cramer, determinant, matrices}。特にエントリ数が変化する一般的なケースを想定しているため、コマンドの書き方から始める方法がわかりません。私のアイデアは、テキストで\splex{Cramer, determinant, matrices}生成するためにを使用することです。\index{Cramer} \index{determinant} \index{matrices}

インターネット上の他の例で同様のコマンドをいくつか見つけ、興味に合わせて調整していますが、まだ理解できないものもあります。以下の例のコマンドは適切でしょうか、それとも改善/置き換え可能でしょうか? また、ポイント 3 と 4 を解決するにはどうすればよいでしょうか?

\documentclass{article}
\usepackage{makeidx}
\makeindex
%\DeclareRobustCommand{\self}[1]{\texttt{#1}\index{#1}} %solves 1 but changes text style
\DeclareRobustCommand{\self}[1]{{#1}\index{#1}} %solves 1 
\DeclareRobustCommand{\sub}[1]{\texttt{#1}\index{Set subordinate!#1}} %solves2
\newcommand{\subdef}[2]{\index{\subd!#1}} %attempt to 3
\begin{document}
  Usefull \self{commands}.

   (some text) \sub{entry1}. 
   (some text)  \sub{entry2}. 

    \newpage
    \section{Especial *NOT WORKING*}
    \def\subd{especial}
     Something1  \subdef{entry1}. 
     Something2  \subdef{entry2}. 
\printindex
\end{document}

補遺

個人用コマンド(基本コマンドから複雑なコマンドまで)の作成方法を学習するための優れたチュートリアルがある場合は、コメントにリンクを投稿してください。

答え1

3 のポイントが何を意味しているのか、よくわかりません。コマンドでは 2 つの引数を指定していますが、定義では 1 つしか使用しておらず、引数をテキスト内に配置するコードがありません。この場合、それが望ましいと思いました。ただし、3 について私が理解している限りでは、これで問題は解決すると思います。

4 は、あなたの要望の観点からは、より理解しやすいです。ただし、私の解決策は に依存しているため、少し複雑ですetoolbox

\documentclass{article}
\usepackage{makeidx,etoolbox}
\makeindex
\DeclareRobustCommand{\self}[1]{{#1}\index{#1}}% solves 1
\DeclareRobustCommand{\sub}[1]{\texttt{#1}\index{Set subordinate!#1}}% solves2
\DeclareRobustCommand{\subdef}[1]{\texttt{#1}\index{\subd!#1}}% solves 3? (not sure I've understood the aim of 3)
% etoolbox manual p. 24
\newcommand\splex[1]{% solves 4
  \forcsvlist{\listadd\mylist}{#1}%
  \forlistloop{\index}{\mylist}}
\begin{document}
  Useful \self{commands}.

  (some text) \sub{entry1}.
  (some text)  \sub{entry2}.

  \section{Especial *WORKING*}
  \def\subd{especial}
  Something1  \subdef{entry1}.
  Something2  \subdef{entry2}.

  \section{Another test}
  \def\subd{another test}
  Something 3  \subdef{entry3}.
  Something 4 \subdef{entry4}.

  \section{Split commands}
  Nothing much to say.\splex{Cramer, determinant, matrices}

  \printindex
\end{document}

テキストとリスト

関連情報