带索引的宏来记录 LaTeX 命令

带索引的宏来记录 LaTeX 命令

我正在写一个文档,解释 LaTeX 的用法。显然,这个文档包含了很多 LaTeX 命令。

我定义了一个宏,它将接受一个参数(命令名称)并以 typewriterfont 打印它。为了让生活更轻松,我认为让宏添加反斜杠是一个聪明的想法。这对我来说很好:

带有反斜杠命令的示例文本输出

多年后,我觉得是时候给文档添加索引了。我将命令添加\index到宏中。我这样做了:

\newcommand{\cmd}[1]{%
  \cmd@font{\textbackslash#1}%
  % Don't forget to reset the font!
  \normalfont\selectfont%
  % Insert the command to the index, but preserve the backslash
  \def\@cmd{#1}
  \index{#1@\texttt{\@cmd}}%
}%

这个已经足够了,唯一的缺点是索引只列出了没有反斜杠的纯命令名称。愚蠢的我没能想出一个聪明的方法来添加反斜杠。

您可以在这里看到索引:

不带反斜杠的索引

如果我通过在索引参数中添加反斜杠来更改宏,如下所示

\newcommand{\cmd}[1]{%
  \cmd@font{\textbackslash#1}%
  % Don't forget to reset the font!
  \normalfont\selectfont%
  % Insert the command to the index, but preserve the backslash
  \def\@cmd{\#1}
  \index{#1@\texttt{\@cmd}}%
}%

它不会打印反斜杠,但会打印#1。这是灾难的示例图片 :-)

哈希导致的索引灾难

实现此功能应采用什么巧妙的方法?

这是明显的 MWE:

\documentclass{article}
\usepackage{makeidx}\makeindex

\makeatletter
\def\cmd@font{\normalfont\ttfamily\selectfont}
\newcommand{\cmd}[1]{%
  \cmd@font{\textbackslash#1}%
  % Don't forget to reset the font!
  \normalfont\selectfont%
  % Insert the command to the index, but preserve the backslash
  \def\@cmd{#1}
  \index{#1@\texttt{\@cmd}}%
}%
\makeatother


\begin{document}

Command \cmd{index} will be used to create a word in the index file,
while \cmd{printindex} will will print the sorted index.

\printindex{}
\end{document}

答案1

您可以使用\textbackslash。在 MWe 中使用它可生成索引:

在此处输入图片描述

这是您修改后的 MWE:

\documentclass{article}
\usepackage{makeidx}\makeindex

\makeatletter
\def\cmd@font{\normalfont\ttfamily\selectfont}
\newcommand{\cmd}[1]{%
  \cmd@font{\textbackslash#1}%
  % Don't forget to reset the font!
  \normalfont\selectfont%
  % Insert the command to the index, but preserve the backslash
  \def\@cmd{#1}
  \index{#1@\texttt{\textbackslash\@cmd}}%
}%
\makeatother


\begin{document}

Command \cmd{index} will be used to create a word in the index file,
while \cmd{printindex} will will print the sorted index.

\printindex{}
\end{document}

顺便说一句,你可能想切换到使用伊玛克它的工作原理几乎完全相同,通过\usepackage{imakeidx},但有许多改进,例如自动索引编译。

相关内容