问题的核心:不兼容的软件包

问题的核心:不兼容的软件包

在 2019 年 10 月 5 日将 MiKTeX 图形包更新至版本 1.3b(2019 年 10 月 4 日晚上 8:11:27 打包)后,我无法编译包含的 LaTex 文件\includegraphics{}

我的系统:Windows 10,带有 MiKTeX 2.9.7200

最小工作示例:

\documentclass{article}
\usepackage{graphics}

\begin{document}

\begin{figure}
   \includegraphics{MC_Antenna_Gain}
\end{figure}

\end{document}

错误报告

This is pdfTeX, Version 3.14159265-2.6-1.40.20 (MiKTeX 2.9.7200)
entering extended mode
(C:/Users/nicrog/Dropbox/T_P_2/Scholar/Grants/Written/EWU_20/Test.tex
LaTeX2e <2018-12-01>
("C:\Program Files (x86)\MiKTeX 2.9\tex/latex/base\article.cls"
Document Class: article 2019/08/27 v1.4j Standard LaTeX document class
("C:\Program Files (x86)\MiKTeX 2.9\tex/latex/base\size10.clo"))
("C:\Program Files (x86)\MiKTeX 2.9\tex/latex/graphics\graphics.sty"
("C:\Program Files (x86)\MiKTeX 2.9\tex/latex/graphics\trig.sty")
("C:\Program Files (x86)\MiKTeX 2.9\tex/latex/graphics-cfg\graphics.cfg")
("C:\Program Files (x86)\MiKTeX 2.9\tex/latex/graphics-def\pdftex.def"))
No file Test.aux.
("C:\Program Files (x86)\MiKTeX 2.9\tex/context/base/mkii\supp-pdf.mkii"
[Loading MPS to PDF converter (version 2006.09.02).]
) ("C:\Program Files (x86)\MiKTeX 2.9\tex/latex/oberdiek\epstopdf-base.sty"
("C:\Program Files (x86)\MiKTeX 2.9\tex/generic/oberdiek\infwarerr.sty")
("C:\Program Files (x86)\MiKTeX 2.9\tex/latex/oberdiek\grfext.sty"
("C:\Program Files (x86)\MiKTeX 2.9\tex/generic/oberdiek\kvdefinekeys.sty"
("C:\Program Files (x86)\MiKTeX 2.9\tex/generic/oberdiek\ltxcmds.sty")))
("C:\Program Files (x86)\MiKTeX 2.9\tex/latex/oberdiek\kvoptions.sty"
("C:\Program Files (x86)\MiKTeX 2.9\tex/latex/graphics\keyval.sty")
("C:\Program Files (x86)\MiKTeX 2.9\tex/generic/oberdiek\kvsetkeys.sty"
("C:\Program Files (x86)\MiKTeX 2.9\tex/generic/oberdiek\etexcmds.sty"
("C:\Program Files (x86)\MiKTeX 2.9\tex/generic/oberdiek\ifluatex.sty"))))
("C:\Program Files (x86)\MiKTeX 2.9\tex/generic/oberdiek\pdftexcmds.sty"
("C:\Program Files (x86)\MiKTeX 2.9\tex/generic/oberdiek\ifpdf.sty")))
! Undefined control sequence.
\Ginclude@graphics ...\Ginput@path \set@curr@file 
                                                  {#1}\edef \uq@curr@file {\...
l.8    \includegraphics{MC_Antenna_Gain}

? 

我会将此潜在错误报告给https://github.com/MiKTeX/miktex-packaging/issues/也一样。

答案1

正如问题中所述,这是 MiKTeX 集成最新 LaTeX 内核更改的方式存在的问题。软件包graphics已更新,但 LaTeX 内核尚未更新,这导致了错误。

一个临时的解决方法是将必要的定义添加到源文件中:幸运的是,这些定义很小

\documentclass{article}
\makeatletter
\def\set@curr@file#1{%
  \begingroup
    \escapechar\m@ne
    \xdef\@curr@file{\expandafter\string\csname #1\endcsname}%
  \endgroup
}
\def\quote@name#1{"\quote@@name#1\@gobble""}
\def\quote@@name#1"{#1\quote@@name}
\def\unquote@name#1{\quote@@name#1\@gobble"}
\makeatother
\usepackage{graphics}

\begin{document}

\begin{figure}
   \includegraphics{example-image-a}
\end{figure}

\end{document}

当然,希望内核能够很快在 MiKTeX 中更新。

答案2

该问题的核心已在 MikTeX 中修复(2019-10-06),但由于情况涉及格式,总体来说有点棘手,我写了一个指南https://github.com/MiKTeX/miktex-packaging/issues/131大致解释一下这里发生了什么,以及如果你仍然遇到这个问题你可以做什么。这几乎是逐字逐句地从那边复制过来的。

好吧,这是一个相当棘手的问题,因为这里涉及到几件事。

问题的核心:不兼容的软件包

问题的核心如下。LaTeX 开发团队发布了一个更新 LaTeX 内核(LaTeX 基础版ltxbase)以及几个核心软件包(例如graphics、、)graphicxamsmath。更新的核心软件包旨在与更新的 LaTeX 内核配合使用,有些需要正确的版本才能正常运行。这些核心软件包包括graphics/ graphicx

这些软件包和内核几乎同时上传到 CTAN,并到达 TeX live,同样的更新。由于时间不巧,仅graphics在 MikTeX 中进行了更新,而 LaTeX 内核仍为旧版本。使用graphicx旧内核的软件包会导致出现错误消息,如https://github.com/MiKTeX/miktex-packaging/issues/132https://github.com/MiKTeX/miktex-packaging/issues/133和这里(以及链接的问题和重复)。

MikTeX 软件包服务器分发不兼容软件包的核心问题已于第二天(2019-10-06 (UTC))迅速修复。此后,服务器已分发与之匹配的最新 LaTeX 基础软件包(2019-10-01)graphics

LaTeX 内核很特别

通常,当软件包更新时,只需更新文件名数据库即可告知 TeX 文件的添加或删除。当使用 MikTeX 控制台更新或安装软件包时,会自动执行此操作(TeX livetlmgr和朋友也是如此),因此普通用户不必担心这一点。

但是 LaTeX 内核比较特殊。它定义了一个TeX 格式并直接嵌入到可执行文件中,这样所有 LaTeX 命令都可以从一开始就使用,而无需加载任何包(LaTeX 命令可以\usepackage从一开始就直接使用,而无需任何包)。这意味着在更新内核时更新文件名数据库是不够的:格式也需要重新生成并嵌入到可执行文件中。当使用 MikTeX 控制台更新 LaTeX 内核包时,这应该会自动发生。

好的,那我该怎么办?

在管理员和用户模式下更新

首先你需要确保你的 MikTeX 系统是最新的。运行更新(参见https://tex.stackexchange.com/a/55473/35864)。如果你有多用户 MikTeX,请确保在用户管理员模式。

lxtbase请访问套餐在 MikTeX 控制台中打开选项卡并搜索ltxbase。安装日期应为 2019-10-06 或更晚,打包日期为 2019-10-05。如果您有多用户 MikTeX 安装,则包可能只能在两种模式之一中安装。您不必在另一种模式下单击安装,只需确保它是最新的什么时候它已安装。

理想情况下应该就是这样。更新期间应根据需要自动生成格式,一切应正常。

补充一点:管理员和用户之间的区别是 MikTeX 中常见的问题来源。更新程序始终只更新以其权限级别安装的软件包。如果您有多用户安装,并且安装了具有用户级和管理员级权限的软件包,则如果您仅使用一个权限级别进行更新,软件包可能会不同步。每当您遇到与更新相关的问题时,请务必在管理员和用户模式下更新您的系统,这通常可以解决问题。(当然,这仅适用于多用户 MikTeX 安装。)

检查格式

你可以通过运行简单的 LaTeX 文档来检查你的 LaTeX 格式,例如

\documentclass{article}
\begin{document}
Lorem
\end{document}

打开生成的.log文件并查看前几行

This is pdfTeX, Version 3.14159265-2.6-1.40.20 (MiKTeX 2.9.7200 64-bit) (preloaded format=pdflatex 2019.10.12)  12 OCT 2019 11:42
entering extended mode
**./formatdate.tex
(formatdate.tex
LaTeX2e <2019-10-01>
("C:\Program Files\MiKTeX 2.9\tex/latex/base\article.cls"
Document Class: article 2019/08/27 v1.4j Standard LaTeX document class

重要的是

LaTeX2e <2019-10-01>

日期应为2019-10-01或以上。

preloaded format=pdflatex 2019.10.12第一行的日期应显示 2019-10-06 之后的日期。

您可以使用命令

kpsewhich --engine=pdftex pdflatex.fmt

从终端找出格式所在的位置。文件夹可能会提示您正在处理的是用户控制格式还是管理员控制格式。这对于下一步很重要。如果是,则C:/Users/<User>/AppData/Local/MiKTeX/2.9/miktex/data/le/pdftex/pdflatex.fmt格式是用户控制的;如果格式位于,则C:/ProgramData/MiKTeX/2.9/miktex/data/le/pdftex/pdflatex.fmt我们谈论的是管理员控制的格式。如果文件路径与这两个示例完全不同,则很可能您在某处发现了伪造的格式。

重新创建格式

如果您的格式不够新,MikTeX 要么在更新期间没有重新创建格式,要么重新创建了格式,但仍然会选择旧版本的格式。

您可以按照以下说明重建 TeX 格式MiKTeX:更新后出现错误:“抱歉,但 pdflatex 未成功。”。您需要重建所有要使用的格式(可能至少pdflatexlatexxelatexlualatex)。可能只需选择所有格式并重建它们即可,但某些格式在重建时可能会产生错误。在这种情况下,您可能需要手动选择所需的格式。

同样,如果您有多用户安装,则可能需要在管理员和用户模式下执行此操作。通常,我建议先在管理员模式下重建格式(如果您有管理员权限),然后仅在仍有必要时在用户模式下重建格式。

如果相关格式在重建时出现您无法解决或理解的错误,请在您最喜欢的 TeX 论坛上提问并提供足够的详细信息,以便人们了解您所做的事情。

如果您重建了格式,但 MikTeX 仍然无法获取正确的格式,则您的 MikTeX 可能配置错误。这将是一个特定问题,只有使用有关系统的更详细信息才能诊断。同样,最好在您最喜欢的 TeX 论坛上尽可能详细地提问。

最后评论

修复来自约瑟夫的回答旨在成为暂时的解决方法。由于 MikTeX 中现在有正确的内核版本,因此不再需要它。请不要再使用此解决方法。而是确保您的格式得到正确更新。

如果你想了解更多关于 TeX 的信息格式, LaTeX 等,请查看http://www.tug.org/levels.htmlTeX 和 LaTeX 有什么区别?。Overleaf 上有一篇关于格式的精彩文章,网址为https://www.overleaf.com/learn/latex/Articles/The_two_modes_of_TeX_engines:_INI_mode_and_production_mode

顺便说一句,新的安装程序等可能对此没有帮助,因为这纯粹是与安装后发生的事情有关的问题。事实上,如果有问题的文件仍留在不受 MikTeX 控制的目录中,那么删除 MikTeX 并安装新版本可能也没有帮助。因此,在开始卸载-重新安装之前,尝试了解问题的来源非常重要。


麦金塔电脑

事实证明,MacTeX(基于 TeX live 而非 MikTeX)存在相关问题:\includegraphics 在 MacTeX 2019 上损坏了吗?。MacTeX 中的更新不会触发格式重建,这意味着即使所有软件包都是最新的,也可能仍会使用较旧的 LaTeX 格式。在这种情况下

fmtutil-sys --all

应该有助于解决这个问题。

关于为什么有必要这样做的更详细讨论请参见https://tug.org/pipermail/tex-live/2019-October/044119.html

答案3

使用使用包graphicx(调用graphics)而不是graphics与最新的 MikTeX(刚刚升级)配合使用:

\documentclass{article}
\usepackage[demo]{graphicx} % <--- in real document remove option "demo"

\begin{document}

\begin{figure}
   \includegraphics{MC_Antenna_Gain}
\end{figure}

\end{document}

结果:

在此处输入图片描述

相关内容