带有子前言的独立辅助文件输出包含未定义的命令

带有子前言的独立辅助文件输出包含未定义的命令

曾是:文档以尺寸作为文本开始

pgfgantt我在子目录中使用文件,该文件使用standalonesubpreambles 功能包含。但是,维度的文本值不知何故被插入到我的文档的开头,导致文档无法编译

main.tex

\documentclass{report}
\usepackage[subpreambles=true]{standalone}

\begin{document}

Before

\input{main/gantt.tex}

\end{document}

main/gantt.tex

\documentclass{standalone}
\usepackage{pgfgantt}

\begin{document}

\begin{ganttchart}[
    vgrid={*1{dotted}},
    x unit=4mm,
    y unit chart=8mm,
    y unit title=4mm,
    time slot format=isodate-yearmonth,
    time slot unit=month,
    title height=1
    ]{2020-06}{2022-12}
    \gantttitlecalendar{year}
\end{ganttchart}

\end{document}

建设成果main.tex

l.3 \gtt@chartextrasize
                       {0}{0.4pt}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

Overleaf 的预览:

在此处输入图片描述

为什么00.4pt输出中会出现?它是从哪里来的?


编辑:正如评论中指出的那样,这无法编译。

如果我添加\usepackage{pgfgantt}main.tex,那么错误和维度就会消失。

为什么这是必要的?

答案1

正如评论中指出的那样,这似乎是 中的一个错误standalone。该类文档提及(第 23 页):

使用钩子在序言末尾加载包 \AtBeginDocument

手册的这部分是关于sort选项的,但有关加载包的注释也适用于subpreambles不带 的选项sort

这可以在包代码中看到(在文件的中间附近):

\AtBeginDocument{%
  \let\subpreamble\@gobble
  \let\endsubpreamble\relax
  \let\standalonepreambles\relax
  \let\endstandalonepreambles\relax
  \ifsa@sortsubpreambles
    \let\sa@orig@usepackage\usepackage
    \let\usepackage\sa@usepackagewithoutoptions
  \fi
  \InputIfFileExists{\jobname.sta}{}{}%
  \ifsa@sortsubpreambles
    \let\usepackage\sa@orig@usepackage
  \fi
  \immediate\openout\sa@out=\jobname.sta\relax
  \immediate\write\sa@out{\string\standalonepreambles}%
}

然而,\AtBeginDocument被执行文件.aux被读取(例如aux文件什么时候被读写?)。要及时执行代码,您可以使用包\AtEndPreamble中的代码etoolbox。从手动的(第 4 页):

\AtEndPreamble{<code>}此钩子与 不同之处在于\AtBeginDocument,它<code>是在前导码末尾执行的,在aux读取主文件(如上一次 LaTeX 传递中所写)之前以及在任何\AtBeginDocument代码之前执行的。

standalone.sty您可以通过复制到与您的文档相同的目录、添加到\RequirePackage{etoolbox}并将提到standalone.sty的 更改为 来检查这是否确实可以用于解决问题。\AtBeginDocument\AtEndPreamble

standalone将此(或等效修复)添加到. 1将会很有用

1我正在考虑添加一个问题https://bitbucket.org/martin_scharrer/standalone/issues但 Bitbucket 问题跟踪器目前是只读的。

相关内容