当我定义多个包含下划线并以相同字符串 ex_ 1, ex_ 2 开头的术语(如下例所示)时,出现以下错误:
!TeX 容量超出,抱歉 [输入堆栈大小=5000]。 \expandafter l.30 \end{frame}
但是,当我使用下面注释掉的行 (e2_ 2) 定义术语 e2 时,它可以编译。如果我只删除转义的下划线(见下文),也可以正常工作。有人能告诉我如何解决这个问题吗?
\documentclass[16pt,pdftex]{beamer}
\usepackage[T1]{fontenc}
\makeatletter
% beamer doesn't define \@idxitem, but it's used by the
% \printterms "index" style, so define it:
\newcommand\@idxitem{\par\hangindent40pt}
\makeatother
\usepackage{datagidx}
\newgidx{index}{Index}
\DTLgidxSetDefaultDB{index}
% this fails:
\newterm[label=e1]{ex\_ 1}
\newterm[label=e2]{ex\_ 2}
% this works
%\newterm[label=e1]{ex\_ 1}
%\newterm[label=e2]{e2\_ 2}
% this works
%\newterm[label=e1]{ex 1}
%\newterm[label=e2]{ex 2}
\begin{document}
\begin{frame}
\frametitle{example}
\gls{e1}
\gls{e2}
\end{frame}
\begin{frame}[allowframebreaks]
\frametitle{Index}
\printterms[style=index]
\end{frame}
\end{document}
答案1
Nicola Talbot 的第二条评论回答了我的问题:如果不指定排序选项,它会尝试按术语排序,而当排序器遇到转义字符时,它会遇到困难。指定排序选项:
\newterm[label=e1,sort={ex1}]{ex\_ 1}
\newterm[label=e2,sort={ex2}]{ex\_ 2}
帮我解决了这个问题。