帮助索引的命令

帮助索引的命令

我希望有更简单的方法来索引大型文本,例如论文、报告、书籍。我发现这里有很多帖子要求一些神奇的工具来自动完成这项工作。据我从评论中了解到,没有人相信机器可以做到这一点重要的为我们完成任务。

因此,我认为促进我们索引工作的最佳解决方案是创建适当的个人命令(到目前为止我还不擅长......)。我至少想做以下事情:

  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 个参数,但您在定义中只使用了一个参数,并且您没有任何代码可以将参数放入文本中,而我认为这在这种情况下是需要的。但是,据我了解,我认为这解决了问题。

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}

文本和列表

相关内容