我怎样才能使独立文档加载siunitx工作?

我怎样才能使独立文档加载siunitx工作?

我有一个独立的文档,其使用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

我可以通过加载来解决这个问题siunitxmain.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),并且可能存在导致问题的包组合。

相关内容