为什么 \newcommand 不能与 \index 和数学参数一起正常起作用?

为什么 \newcommand 不能与 \index 和数学参数一起正常起作用?

我本来打算缩短\index命令(包makeidx),如下所示。我正在处理一个大文档,总是忘记在索引条目命令前另外写上普通单词\index{}

但出了点问题:索引中的箭头打印不正确。(别忘了也用 Makeindex 编译最小示例——我经常忘记。)我对两种引擎(XeLaTeX 和 pdfLaTeX)的解决方案都很感兴趣,但它只能与 XeLaTeX 一起使用。

为什么向下的箭头打印为一个超大的括号?

问题似乎出在我使用数学模式的 \newcommand 参数时。它与使用 pdfLaTeX 或 XeLaTeX 进行编译无关。

最小示例:

% !TEX TS-program = pdflatex
% !TEX encoding = UTF-8 Unicode

% This is a simple template for a LaTeX document using the "article" class.
% See "book", "report", "letter" for other types of document.

\documentclass[11pt]{article} % use larger type; default would be 10pt

\usepackage[utf8]{inputenc} % set input encoding (not needed with XeLaTeX)

\usepackage{makeidx}
\makeindex

\newcommand{\indiziere}[1]{\emph{#1}\index{#1}}

%%% The "real" document content comes below...

\title{Brief Article}
\author{The Author}
%\date{} % Activate to display a given date or no date (if empty),
         % otherwise the current date is printed 

\begin{document}
\maketitle

\section{First section}

More text. \emph{1$f(x) \downarrow $}\index{1$f(x) \downarrow $}.\newline
\indiziere{2$f(x) \downarrow $}.

\printindex
\end{document}

答案1

您的命令评估#1“太早”,因此文件的文件内容.ind已包含分隔符 ( \delimiter 3223379)。这样\string就可以了。

旁注:“两种”引擎有点误导,因为除了 pdf-/XeLaTeX 之外还有更多的引擎(例如 LuaLaTeX)。

%!TeX TS-program=arara
% arara: xelatex
% arara: makeindex
% arara: xelatex
% arara: xelatex
\documentclass[11pt]{article} % use larger type; default would be 10pt

\usepackage{makeidx}
\makeindex

\newcommand{\indiziere}[1]{\emph{#1}\index{\string#1}}

\title{Brief Article}
\author{The Author}

\begin{document}
\maketitle

\section{First section}

More text. \emph{1$f(x) \downarrow $}\index{1$f(x) \downarrow $}.\newline
\indiziere{2$f(x) \string\downarrow $}.

\printindex
\end{document}

答案2

\index是宏的参数时,该参数\index不能被“清理”(即基本上逐字处理)。

您可以使用以下方式模拟该行为\detokenize

\documentclass[11pt]{article} % use larger type; default would be 10pt

\usepackage[utf8]{inputenc} % set input encoding (not needed with XeLaTeX)

\usepackage{makeidx}
\makeindex

\newcommand{\indiziere}[1]{\emph{#1}\index{\detokenize{#1}}}

%%% The "real" document content comes below...

\title{Brief Article}
\author{The Author}
%\date{} % Activate to display a given date or no date (if empty),
         % otherwise the current date is printed

\begin{document}
\maketitle

\section{First section}

More text. \emph{1$f(x) \downarrow $}\index{1$f(x) \downarrow $}.\newline
\indiziere{2$f(x) \downarrow $}.

\printindex
\end{document}

相关问题描述如下按出现次数排序的符号索引

相关内容