我正在编写一个大型文档,其中使用了命名法nomencl
。某些\nomenclature{foo}{bar}
条目导致以下错误:
Undefined control sequence.
<argument> \list@fname
我正在尝试找出如何修复该问题,以及是什么原因foo
(bar
如果有的话)导致了该问题。
手动从文件中删除相应行main.nls
会导致错误消失。但更改行的内容(源自foo
和bar
)不会使错误消失。
所有这些似乎都表明错误不依赖于foo
和bar
,但这怎么可能呢?
我不知道如何制作一个可以重现该错误的小例子;如能提供任何关于如何做到这一点的建议,我将不胜感激。
编辑:根据 David Carlisle 的建议,我制作了以下 MWE:
main.tex
\documentclass{memo-l}
\usepackage[refpage]{nomencl}
\makenomenclature
\begin{document}
\printnomenclature
\end{document}
main.nls
\begin{thenomenclature}
\nomgroup{Symbols}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
\item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
% \item [foo] \begingroup bar \nomeqref{0.0}\nompageref{1}
%this last line yields "! Undefined control sequence. <argument> \list@fname"
\end{thenomenclature}
答案1
nomencl
默认情况下,加载的包与tocbasic
不兼容memo-l
(基于amsbook
);这是导致您收到错误的原因。您需要选项notocbasic
。
其次,\chapter*
由 完成的\printnomencl
,它自行设置标题,因此我们必须禁用\@mkboth
由 发出的nomencl
。
第三,为了在标题中正确转换为大写,最好加载,textcase
因此amsbook
不会使用原始的\uppercase
,而是使用 LaTeX 感知的\MakeUppercase
。
\documentclass{memo-l}
\usepackage[refpage,notocbasic]{nomencl}
\usepackage{textcase} % avoid amsbook using \uppercase
\usepackage{xpatch}
\usepackage{lipsum} % just for the example
\makenomenclature
\makeatletter
\xpatchcmd{\thenomenclature}{\@mkboth}{\@gobbletwo}{}{}
\makeatother
\begin{document}
\tableofcontents
\chapter*{No number}
\lipsum[1-12]
\chapter{test}
\ExplSyntaxOn
\prg_replicate:nn { 40 } { \addcontentsline{toc}{section}{AAAAA} }
\ExplSyntaxOff
\lipsum[1-12]
\ExplSyntaxOn
\int_step_inline:nn { 100 } { \nomenclature{#1}{--#1--} }
\ExplSyntaxOff
\printnomenclature
\end{document}