我有一个独立的文档,其使用siunitx
:
% subdocument.tex
\documentclass{standalone}
\usepackage{siunitx}
\begin{document}
\SI{10}{\kilo\newton}
\end{document}
我想使用包将此独立文档作为子文档包含在其他文档中standalone
。因为我不想手动跟踪子文档需要哪些包,所以我想使用以下subpreambles=true
选项standalone
:
% main.tex
\documentclass{article}
\usepackage[subpreambles=true]{standalone}
\begin{document}
\input{subdocument.tex}
\end{document}
但是,如果我这样做,我会收到一条错误消息:
! Undefined control sequence.
<argument> \l__siunitx_option_deactivate_clist
我可以通过加载来解决这个问题siunitx
,main.tex
但我希望有另一种方法可以解决这个问题。
以下是 MWE:
\documentclass{article}
\begin{filecontents}{subdocument.tex}
\documentclass{standalone}
\usepackage{siunitx}
\begin{document}
\SI{10}{\kilo\newton}
\end{document}
\end{filecontents}
% This works (loading siunitx only in the main document)
%\usepackage[subpreambles=false]{standalone}
%\usepackage{siunitx}
% This doesn't (loading siunitx in the sub-document), but it would be nice if it did:
\usepackage[subpreambles=true]{standalone}
\begin{document}
\input{subdocument.tex}
\end{document}
答案1
事实证明,\AtBeginDocument{\renewcommand{\AtBeginDocument}[1]{}}
在加载包之前添加即可使 MWE 正确编译。这绝对不是正确的解决方案,因为这会丢弃包认为需要在中完成的standalone
所有事情。如果我们改为使用 MWEsiunitx
\AtBeginDocument
\documentclass{article}
\usepackage{etoolbox}
\newcommand{\AtBeginSubDocument}{}
\AtBeginDocument{\renewcommand{\AtBeginDocument}[1]{\apptocmd{\AtBeginSubDocument}{#1}{}{}}}
\usepackage[subpreambles=true]{standalone}
\AtBeginDocument{\meaning\AtBeginSubDocument}
\AtBeginDocument{\AtBeginSubDocument}
\begin{document}
\input{subdocument.tex}
\end{document}
MWE 编译并显示大约有 2 页内容正在被签入\AtBeginDocument
。这其中大部分看起来像是检查包是否已加载(即@ifpackageloaded
),并且可能存在导致问题的包组合。