Команды для помощи в индексации

Команды для помощи в индексации

Я хочу иметь более простые способы индексации больших текстов, таких как диссертации, отчеты, книги. Я нашел много постов здесь, в которых просили какой-нибудь волшебный инструмент, чтобы делать это автоматически. И насколько я понял из комментариев, никто не верит, что машина может сделать этоважныйЗАДАЧА для нас.

Итак, я думаю, что лучшим решением для облегчения нашей работы по индексированию будет создание правильных персональных команд (в чем я пока не силен...). Я хочу сделать как минимум следующее:

  1. Иметь возможность печатать индексированное слово в тексте, т. е. избегать повторного ввода текста.

    (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, но теперь команда должна использовать переменную, определенную в частях текста (чтобы заменить фиксированное "слово" в предыдущем). Это возможно? см. попытку в разделе "Especial" в примере ниже

  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 аргумента, но вы используете только один в определении, и у вас нет кода, который бы поместил аргумент в текст, что, как я думал, было желательно в этом случае. Однако, насколько я понимаю пункт 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}

текст и список

Связанный контент