`nomencl`:错误“未定义的控制序列。\列表@fname”

`nomencl`:错误“未定义的控制序列。\列表@fname”

我正在编写一个大型文档,其中使用了命名法nomencl。某些\nomenclature{foo}{bar}条目导致以下错误:

Undefined control sequence.
<argument> \list@fname 

我正在尝试找出如何修复该问题,以及是什么原因foobar如果有的话)导致了该问题。

手动从文件中删除相应行main.nls会导致错误消失。但更改行的内容(源自foobar)不会使错误消失。

所有这些似乎都表明错误不依赖于foobar,但这怎么可能呢?

我不知道如何制作一个可以重现该错误的小例子;如能提供任何关于如何做到这一点的建议,我将不胜感激。

编辑:根据 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}

在此处输入图片描述

相关内容