\AtBeginDocument / \subfigure: TeX Live 2020 问题

\AtBeginDocument / \subfigure: TeX Live 2020 问题

我有一个文件(test.tex),其内容如下:

\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{subcaption}
\pagestyle{empty}
\begin{document}

\begin{figure}

  \includegraphics[width=\linewidth]{example-image}
  \caption{This caption should disappeard...}

\end{figure}

\end{document}

并产生布局:

在此处输入图片描述

在 Tex Live 2019 之前我曾经运行以下命令:

pdflatex "\AtBeginDocument{\def\caption#1{}} \nonstopmode \input{test.tex}"

获得没有标题的图形:

在此处输入图片描述

但在 TeX Live 2020 中它不再起作用。.pdf生成的文件仍然包含标题。当subcaption调用类似的包时会发生这种情况。

有没有办法使用 TeX Live 2020 获得相同的结果?

答案1

从您的日志(实际上是终端会话,其中包含的信息远少于实际.log文件):

This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
LaTeX2e <2020-02-02> patch level 5

它告诉你,你从二月份开始就拥有 TeX Live 2020,并且

subcaption.sty    2020/01/22 v1.3d Sub-captions (AR)
 caption.sty    2020/01/03 v3.4h Customizing captions (AR)
caption3.sty    2020/01/03 v1.8h caption3 kernel (AR)

这也是今年年初以来的。

问题是该版本caption.sty定义了\caption \AtBeginDocument,这在命令行重新定义之后发生。您可以更新(推荐)或使用稍后的钩子来重新定义\caption


要更新 TeXLive,您只需运行(sudo如果您使用 root 安装,则可能需要运行):

tlmgr update --all --self

--all告诉它更新所有软件包;您可以用要更新的软件包列表替换它;用于tlmgr update --list查看具有更新候选的软件包。 --self告诉tlmgr在需要时更新自身)。在您的特定情况下,由于某种原因sudo tlmgr不起作用,因此您可以尝试使用(扩展为您的用户名)更改texlive文件夹的所有权。sudo chown -R $(whoami):$(whoami) /usr/local/texlive$(whoami)


为了解决这个问题,您需要使用一个钩子\AtBeginDocument(除非您有一个较新的 LaTeX,那么您可以使用它,lthooks而且一切都会变得容易得多)。

最好的方法是添加一个\csname mycommandline\endcsnameafter \begin{document},然后使用以下命令进行构建:

$ pdflatex "\def\mycommandline{\def\caption##1{}} \input{test.tex}"

但是,假设你不想更改你的文档(我不是建议这样做!)您可以使用\AfterEndPreamble,由 提供etoolbox,但由于您是从命令行加载的,因此您无法加载包,否则 TeX 将设置\jobname(打开.log)并且您的文档将保存到 中texput.pdf。因此,您需要一个钩子来延迟加载etoolbox以延迟重新定义\caption(看到并发症了吗?)。您可以挂接到\documentclass(不要):

pdflatex "\edef\documentclass{\unexpanded{\RequirePackage{etoolbox}\AfterEndPreamble{\def\caption#1{}}}\unexpanded\expandafter{\documentclass}} \input{test.tex}"

相关内容