我希望有更简单的方法来索引大型文本,例如论文、报告、书籍。我发现这里有很多帖子要求一些神奇的工具来自动完成这项工作。据我从评论中了解到,没有人相信机器可以做到这一点重要的为我们完成任务。
因此,我认为促进我们索引工作的最佳解决方案是创建适当的个人命令(到目前为止我还不擅长......)。我至少想做以下事情:
有办法打印文本中的索引词,即避免输入两次
(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 个参数,但您在定义中只使用了一个参数,并且您没有任何代码可以将参数放入文本中,而我认为这在这种情况下是需要的。但是,据我了解,我认为这解决了问题。
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}