siunitx 的编译问题(返回与 ifnum 相关的错误)

siunitx 的编译问题(返回与 ifnum 相关的错误)

我正在尝试siunitx工作。出于某种原因,我一直收到此错误:

! Missing = inserted for \ifnum.
<to be read again> 
                   -
l.3 \begin
          {document}^^M

我尝试了一个最小文档以确保这不是某种兼容性问题。但我在尽可能最小的文档中也遇到了同样的错误。

我使用 pdfLaTeX 进行编译,并尝试过从 TeXWorks 和 bash 进行编译。如果有必要的话,我使用 TeXLive。我还尝试重新安装siunitxl3packagesl3kernel。在此之前,由于版本显然较旧,出现了问题l3kernel。但现在所有三个软件包都是最新的。expl3在尝试调试原始问题时,我也重新安装了。

我的最小文件是:

\documentclass{article}
\usepackage{siunitx}
\begin{document}
\end{document}

我得到的输出是:

This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./untitled-2.tex
LaTeX2e <2016/02/01>
Babel <3.9q> and hyphenation patterns for 81 language(s) loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
(/home/<name>/texmf/tex/latex/siunitx/siunitx.sty
(/home/<name>/texmf/tex/latex/l3kernel/expl3.sty
(/home/<name>/texmf/tex/latex/l3kernel/expl3-code.tex)
(/home/<name>/texmf/tex/latex/l3kernel/l3pdfmode.def))
(/home/<name>/texmf/tex/latex/l3packages/xparse/xparse.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))
(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty)
(/home/<name>/texmf/tex/latex/l3packages/l3keys2e/l3keys2e.sty)
(/usr/share/texlive/texmf-dist/tex/latex/beamer/translator/translator.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/share/texlive/texmf-dist/tex/latex/beamer/translator/translator-language-
mappings.tex)))
! Missing = inserted for \ifnum.
<to be read again> 
                  -
l.3 \begin
         {document}^^M
?

有人知道这里可能出了什么问题吗?

答案1

siunitxyyyy/mm/dd暂时恢复到旧版本,因此即使使用旧版本的 LaTeX 也应该可以顺利编译(当然您仍然需要所需版本l3kernel等)。

由于这个问题似乎引起了一些人的关注,所以我来解释一下这里发生了什么。

LaTeX 软件包通常会向 TeX 标识其发布日期(以及名称、版本号以及简短描述)。这在\ProvidesPackage(或\ProvidesClass对于类或\ProvidesFile一般文件,请参阅ProvidesFile 是否比 ProvidesPackage 或 ProvidesClass 更好)。包的第一行可能如下所示

\ProvidesPackage{csquotes}[2018/04/13 v5.2d context-sensitive quotations (JAW)]

给出的日期可以帮助 LaTeX 确定包裹是否早于指定的截止日期\@ifpackagelater,请参阅需要某个软件包的某个版本(或更高版本)吗?

传统上,所有软件包都以 格式提供日期yyyy/mm/dd。在 2017 年 4 月发布的 LaTeX 内核中,支持 ISO 日期格式yyyy-mm-dd添加了对 ISO 日期格式的支持。请参阅https://www.latex-project.org/news/latex2e-news/ltnews27.pdf

只有标识为LaTeX2e <2017-04-15>或较新的 LaTeX 版本才能处理 ISO 日期格式,所有旧版本只能接受yyyy/mm/dd

由于这是相对较新的更改,因此没有多少软件包采用新的日期格式,但一些积极维护的软件包已切换到新格式。这些软件包通常假设用户会保持 TeX 安装为最新。 siunitx是现在使用 ISO 日期格式的软件包之一。

.log问题中的文件表明您仍在运行,LaTeX2e <2016/02/01>这对于 ISO 日期格式来说太旧了。

你必须更新你的 TeX 发行版。请参阅我如何更新我的 TeX 发行版?应该如何维护和更新 MiKTeX 安装?

事实上,您获得了新版本的软件包,但是却停留在旧版本的内核中,这意味着您要么手动更新或安装了某些软件包(通常是一个非常糟糕的主意),要么只部分更新了您的安装(同样,这是一个坏主意),或者没有记得使用正确的权限进行更新(MikTeX 多用户安装需要以管理员和用户身份更新,即两次)。


如果您由于某种原因无法更新您的 TeX 发行版,那么有一种可用的解决方法。

LaTeX3 团队提供了一个名为latexrelease可用于在旧版本中获取较新内核版本的功能。根据https://www.latex-project.org/news/latex2e-news/ltnews27.pdf因为它总是启用 ISO 日期,所以加载包就足够了,但为了安全起见,你可以加载

\RequirePackage[2017/04/15]{latexrelease}

如果您仍使用旧版本的 LaTeX,则在文档的最开始处。这将有效地将旧版本的 LaTeX 内核“更新”为该2017-04-15版本。

当然,您仍然需要获取latexrelease相当新的版本。


TeX Live 2015/Debian让我觉得你可能被 Linux 发行版附带的过时(稳定)版 TeX live 困住了。在这种情况下,你几乎无法控制 TeX 安装,只能通过官方软件包存储库安装或删除软件包。手动安装可能会导致各种问题。

为了更好地控制你的 TeX 发行版,你可以安装 vanilla TeX live:如何在 Debian 或 Ubuntu 上安装“原始” TeXLive?

答案2

这不一定是一个“答案”,但我遇到了完全相同的问题,并且能够解决它。

我已经用 MiKTeX 更新了所有软件包。我还尝试删除 AppData 文件夹C:\Users\Kevin\AppData\Roaming\MiKTeX\2.9。但问题仍然存在。

我根据您的最小文档遵循了 Joseph Wright 的建议。我能够毫无问题地加载expl3amstext和。我还在输入的开头添加了内容。translator\listfiles

\listfiles
\documentclass{article}
\usepackage{siunitx}
\begin{document}
\end{document}

以下是日志文件的一些部分。

开始部分:

This is pdfTeX, Version 3.14159265-2.6-1.40.17 (MiKTeX 2.9.6210 64-bit) (preloaded format=pdflatex 2017.2.1)  25 MAR 2018 18:18
entering extended mode
**./troubleshoot_siunitx.tex
(troubleshoot_siunitx.tex
LaTeX2e <2017/01/01> patch level 1
Babel <3.9r> and hyphenation patterns for 75 language(s) loaded.
("C:\Program Files\MiKTeX 2.9\tex\latex\base\article.cls"
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
("C:\Program Files\MiKTeX 2.9\tex\latex\base\size10.clo"
File: size10.clo 2014/09/29 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
)
(C:\Users\Kevin\AppData\Roaming\MiKTeX\2.9\tex\latex\siunitx\siunitx.sty
(C:\Users\Kevin\AppData\Roaming\MiKTeX\2.9\tex\latex\l3kernel\expl3.sty
Package: expl3 2018/03/05 L3 programming layer (loader) 

(C:\Users\Kevin\AppData\Roaming\MiKTeX\2.9\tex\latex\l3kernel\expl3-code.tex
Package: expl3 2018/03/05 L3 programming layer (code)

还有更多,后来,在许多类似的xparse台词之后,

.................................................
. LaTeX info: "xparse/define-command"
. 
. Defining command \siInBookmark with sig. 'om' on line 7426.
.................................................
\g__file_internal_ior=\read1

(C:\Users\Kevin\AppData\Roaming\MiKTeX\2.9\tex\latex\translator\translator.sty
Package: translator 2018/01/04 v1.12 Easy translation of strings in LaTeX

("C:\Program Files\MiKTeX 2.9\tex\latex\graphics\keyval.sty"
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
\KV@toks@=\toks16
)))
! Missing = inserted for \ifnum.
<to be read again> 
                   -
l.3 \begin
          {document}

I was expecting to see `<', `=', or `>'. Didn't.

(troubleshoot_siunitx.aux)
\openout1 = `troubleshoot_siunitx.aux'.

错误就出在这里。最后,我们得到了文件列表。

 *File List*
 article.cls    2014/09/29 v1.4h Standard LaTeX document class
  size10.clo    2014/09/29 v1.4h Standard LaTeX file (size option)
 siunitx.sty    2018-03-20 v2.7m A comprehensive (SI) units package
   expl3.sty    2018/03/05 L3 programming layer (loader) 
expl3-code.tex    2018/03/05 L3 programming layer 
l3pdfmode.def    2017/03/18 v L3 Experimental driver: PDF mode
  xparse.sty    2018/02/21 L3 Experimental document command parser
 amstext.sty    2000/06/29 v2.01 AMS text
  amsgen.sty    1999/11/30 v2.0 generic functions
   array.sty    2016/10/06 v2.4d Tabular extension package (FMi)
l3keys2e.sty    2018/02/21 LaTeX2e option processing using LaTeX3 keys
translator.sty    2018/01/04 v1.12 Easy translation of strings in LaTeX
  keyval.sty    2014/10/28 v1.15 key=value parser (DPC)
translator-basic-dictionary-English.dict    
siunitx-abbreviations.cfg    2017/11/26 v2.7k siunitx: Abbreviated units
 ***********

这时,我变得绝望了,所以我卸载了 MiKTeX,下载了最新版本,然后重新安装。这是在 Windows 7 上,我没有重新启动。现在我可以无错误地进行编译。重新安装 MiKTeX 后,以下是我的文件列表,安装成功后显示。是一样的。但我注意到日期格式不同siunitx.sty

 *File List*
 article.cls    2014/09/29 v1.4h Standard LaTeX document class
  size10.clo    2014/09/29 v1.4h Standard LaTeX file (size option)
 siunitx.sty    2018-03-20 v2.7m A comprehensive (SI) units package
   expl3.sty    2018/03/05 L3 programming layer (loader) 
expl3-code.tex    2018/03/05 L3 programming layer 
l3pdfmode.def    2017/03/18 v L3 Experimental driver: PDF mode
  xparse.sty    2018/02/21 L3 Experimental document command parser
 amstext.sty    2000/06/29 v2.01 AMS text
  amsgen.sty    1999/11/30 v2.0 generic functions
   array.sty    2016/10/06 v2.4d Tabular extension package (FMi)
l3keys2e.sty    2018/02/21 LaTeX2e option processing using LaTeX3 keys
translator.sty    2018/01/04 v1.12 Easy translation of strings in LaTeX
  keyval.sty    2014/10/28 v1.15 key=value parser (DPC)
translator-basic-dictionary-English.dict    
siunitx-abbreviations.cfg    2017/11/26 v2.7k siunitx: Abbreviated units
 ***********

答案3

我通过将 siunitx 软件包下载到以前的版本,成功地解决了这个问题CTAN 镜像页面并按照说明手动安装这里

就我而言,解决方案不是更新软件包,而是将其恢复到以前的版本。

答案4

我看到了 Kevin 的回答,并尝试了一些方法来修复错误。它似乎来自日期格式。

siunitx.sty    2018-03-20 v2.7m A comprehensive (SI) units package

应该

siunitx.sty    2018/03/20 v2.7m A comprehensive (SI) units package

这是我的第一篇帖子,也是最丑陋的修复。只需手动修改 texmf 目录中的日期格式:

grep -rl "2018-03-20" /path/to/your/texmf/dir | xargs sed -i -e 's/2018-03-20/2018\/03\/20/g'

\ifnum为我修复了这些错误。

相关内容