
Я хочу иметь более простые способы индексации больших текстов, таких как диссертации, отчеты, книги. Я нашел много постов здесь, в которых просили какой-нибудь волшебный инструмент, чтобы делать это автоматически. И насколько я понял из комментариев, никто не верит, что машина может сделать этоважныйЗАДАЧА для нас.
Итак, я думаю, что лучшим решением для облегчения нашей работы по индексированию будет создание правильных персональных команд (в чем я пока не силен...). Я хочу сделать как минимум следующее:
Иметь возможность печатать индексированное слово в тексте, т. е. избегать повторного ввода текста.
(some text) word \index{word} ...
с определением команды
\self
, приведенным ниже, я получаю то, что хочу.\DeclareRobustCommand{\self}[1]{{#1}\index{#1}} %solves 1
Определить команду для записей внутри индексированного слова, повторяющегося несколько раз. Например: избегать повторения «слова»
\index{word! entry1}, \index{word! entry1}, \index{word! entry1}...
Приведенная ниже команда \sub
делает это.
\DeclareRobustCommand{\sub}[1]{\texttt{#1}\index{Set subordinate!#1}} %solves2
То же самое, что и 2, но теперь команда должна использовать переменную, определенную в частях текста (чтобы заменить фиксированное "слово" в предыдущем). Это возможно? см. попытку в разделе "Especial" в примере ниже
Команда для разделения индекса (
\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}