我有一个文件(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\endcsname
after \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}"