永久“未定义控制序列?”

永久“未定义控制序列?”

我非常困惑,对此我完全没有解释。我正高兴地编写我的文档,该文档在几周前就已经编译好了,然后我添加了一些小东西并得到了以下结果:

! Undefined control sequence.
l.65 \zref@n

?

好的,我去了第 65 行。那行是一条评论。为了确保万无一失,我还是删除了注释,但还是出现了同样的错误。我删除了我添加的部分,因此回到了 5 分钟前编译完美的文档。同样的错误。

事情开始变得奇怪了。我删除了所有内容大约第 65 行也是如此(这仍然是我的 premable 的一部分,所以它是一些命令定义) - 并得到了完全相同的错误!现在我真的很困惑,所以我删除了序言中的一切除了必要的最低限度(例如 \documentclass 和 \begin{document})。结果再次是第 65 行的未定义控制序列。出于好奇,我删除了整个事情,用一个简单的 Hello World 文档替换它。同样 - 第 65 行的控制序列未定义(甚至没有存在在 Hello World 文档中,更不用说定义命令了)

除了如何创建相对简单的文档之外,我对 LaTeX 了解不多,而且谷歌在这个问题上也没有特别的帮助。我完全被难住了。有没有人遇到过类似的问题?

答案1

TeX 使用外部文件来管理其编译过程。原因是它以非常直接的单程方式进行编译,即时吞噬和排版。因此,唯一可以成功进行前瞻性引用的方法就是在确定应该是什么之后对其进行追溯更正。TeX 管理此问题的方式是使用辅助.aux. 文件。有关更多信息,请参阅了解引用和标签的工作原理

以下情况可能发生:

您使用了zref包裹为某事。zref是一个交叉引用包,这些引用.aux广泛使用了。因此,有些东西被写入了,.aux它使用了已知的功能/接口zref,但没有其他包,也许,编译已中止编写了一个格式错误的控制序列\zref@n。然后您删除了它\usepackage{zref},认为它不会影响您的文档。但是,当.aux读入时(在\begin{document}),zref相关内容仍然存在于上次编译中,现在编译器不知道。/console 中引用的行号.log将是.aux文件内的第 65 行,而不是主文件中的行。*

解决这个问题的方法是重新开始,通常是删除所有辅助的 文件并重新编译。


*您如何知道?文档中包含的文件由中的(...支撑。例如,以下最小文档:).log

\documentclass{article}
\usepackage{mwe}% http://ctan.org/pkg/lipsum
\begin{document}
\lipsum
\end{document}

虽然它只包含一个包,但它加载了大量的文件。检查.log节目

...
(/usr/local/texlive/2013/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2013/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
)
\c@part=\count79
\c@section=\count80
\c@subsection=\count81
\c@subsubsection=\count82
\c@paragraph=\count83
\c@subparagraph=\count84
\c@figure=\count85
\c@table=\count86
\abovecaptionskip=\skip41
\belowcaptionskip=\skip42
\bibindent=\dimen102
) (/usr/local/texlive/2013/texmf-dist/tex/latex/mwe/mwe.sty
Package: mwe 2012/05/15 v0.3 Package to support minimal working examples (MWE)
(/usr/local/texlive/2013/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/local/texlive/2013/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
\KV@toks@=\toks14
) (/usr/local/texlive/2013/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
(/usr/local/texlive/2013/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
) (/usr/local/texlive/2013/texmf-dist/tex/latex/latexconfig/graphics.cfg
File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live
)
Package graphics Info: Driver file: pdftex.def on input line 91.
(/usr/local/texlive/2013/texmf-dist/tex/latex/pdftex-def/pdftex.def
File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX
(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/infwarerr.sty
Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO)
) (/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
)
\Gread@gobject=\count87
))
\Gin@req@height=\dimen103
\Gin@req@width=\dimen104
) (/usr/local/texlive/2013/texmf-dist/tex/latex/lipsum/lipsum.sty
Package: lipsum 2011/04/14 v1.2 150 paragraphs of Lorem Ipsum dummy text
\c@lips@count=\count88
) (/usr/local/texlive/2013/texmf-dist/tex/latex/blindtext/blindtext.sty
Package: blindtext 2012/01/06 V2.0 blindtext-Package
(/usr/local/texlive/2013/texmf-dist/tex/latex/tools/xspace.sty
Package: xspace 2009/10/20 v1.13 Space after command names (DPC,MH)
)
\c@blindtext=\count89
\c@Blindtext=\count90
\c@blind@countparstart=\count91
\blind@countxx=\count92
\blindtext@numBlindtext=\count93
\blind@countyy=\count94
\c@blindlist=\count95
\c@blindlistlevel=\count96
\c@blindlist@level=\count97
\blind@listitem=\count98
\c@blind@listcount=\count99
\c@blind@levelcount=\count100
\blind@mathformula=\count101
\blind@Mathformula=\count102
\c@blind@randomcount=\count103
\c@blind@randommax=\count104
\c@blind@pangramcount=\count105
\c@blind@pangrammax=\count106
)) (/compile/output.aux)
\openout1 = `output.aux'.

LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.
(/usr/local/texlive/2013/texmf-dist/tex/context/base/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count107
\scratchdimen=\dimen105
\scratchbox=\box26
\nofMPsegments=\count108
\nofMParguments=\count109
\everyMPshowfont=\toks15
\MPscratchCnt=\count110
\MPscratchDim=\dimen106
\MPnumerator=\count111
\makeMPintoPDFobject=\count112
\everyMPtoPDFconversion=\toks16
) (/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO
)
(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/ifluatex.sty
Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
Package ifluatex Info: LuaTeX not detected.
) (/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/ifpdf.sty
Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO)
Package ifpdf Info: pdfTeX in PDF mode is detected.
)
Package pdftexcmds Info: LuaTeX not detected.
Package pdftexcmds Info: \pdf@primitive is available.
Package pdftexcmds Info: \pdf@ifprimitive is available.
Package pdftexcmds Info: \pdfdraftmode found.
) (/usr/local/texlive/2013/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf
(/usr/local/texlive/2013/texmf-dist/tex/latex/oberdiek/grfext.sty
Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO)
(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty
Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO)
)) (/usr/local/texlive/2013/texmf-dist/tex/latex/oberdiek/kvoptions.sty
Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO)
(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO)
(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/etexcmds.sty
Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
Package etexcmds Info: Could not find \expanded.
(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
(etexcmds)             that some package has redefined \expanded.
(etexcmds)             In the latter case, load this package earlier.
)))
Package grfext Info: Graphics extension search list:
(grfext)             [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE
G,.JBIG2,.JB2,.eps]
(grfext)             \AppendGraphicsExtensions on input line 452.
(/usr/local/texlive/2013/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
)) [1

{/usr/local/texlive/2013/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] [2] (/c
ompile/output.aux) )
...

(修剪大部分输出,您会注意到使用...方法根据文件名突出显示包的括号(嵌套)结构)

...
(output.tex
  (article.cls
    (size10.clo)
  )
  (mwe.sty
    (graphicx.sty
      (keyval.sty)
      (graphics.sty
        (trig.sty)
        (graphics.cfg)
        (pdftex.def
          (infwarerr.sty)
          (ltxcmds.sty)
        )
      )
    )
    (lipsum.sty)
    (blindtext.sty
      (xspace.sty)
    )
  )
  (output.aux)
  (supp-pdf.mkii)
  (pdftexcmds.sty
    (ifluatex.sty)
    (ifpdf.sty)
  )
  (epstopdf-base.sty
    (grfext.sty
      (kvdefinekeys.sty)
    )
    (kvoptions.sty
      (kvsetkeys.sty
        (etexcmds.sty)
      )
    )
    (epstopdf-sys.cfg)
  )
  (output.aux)
)
...

第一个实例output.aux用于读取前一次编译中可用的任何内容。第二个实例表示在当前编译期间正在打开它以进行写入。

答案2

在他的回答Werner 已经详细展示了如何找到属于错误消息中的行号的文件。我猜是该.aux文件,因为删除它就可以解决问题。

\zref@n看起来像是软件包的命令zref。但是,它没有定义或知道此命令;它未列在软件包文档的索引中。此外,软件包在文件zref的最开头.aux为软件包使用的命令提供了命令定义。

因此我猜想这\zref@n是一条截断的命令。 一个不错的全名候选是\zref@newlabel,相当于\@newlabelLaTeX 的\label

可能的情况:

  • 通常,在写入文件时,输出会被缓冲.aux。写入的最后一个缓冲区以 结尾\zref@n,下一个缓冲区将以 开头ewlabel。然后 LaTeX 运行中止,计算机关闭,而写入缓存尚未清除,磁盘已满,... -> 结果是一个截断的.aux文件。

  • 下一次运行 LaTeX 会读取.aux处的文件\begin{document}。如果没有错误,它会.aux通过打开一个新.aux文件进行写入来删除该文件。然后在文档主体的其余部分中填充该文件。

  • 但是,如果在第一次读取期间,LaTeX 没有继续(x例如,用户按下 ),那么无论文档主体如何更改,有问题的文件都会保留下来,并在下一次 LaTeX 运行中造成同样的问题。即使文档被替换为一个简单的“hello world”文档。文件.aux的读取将继续导致错误。.aux\begin{document}

处理此类问题的方法:

  • 删除辅助文件可以解决问题,因为由于截断.aux文件而导致的未知命令会消失。
  • 有时忽略错误或在出现q错误消息时按下批处理模式会有所帮助。如果 LaTeX 可以继续工作,那么就会出现这种情况:文件.aux重新打开以进行写入,旧内容被清除。然后下一次运行 LaTeX 会得到一个新.aux文件(希望没有错误)。

相关内容