独立构建命令无法捕获所有长度

独立构建命令无法捕获所有长度

我正在处理standalone子文件build mode。我想将主文件的长度传递给子文件。为此,根据这个答案,我把它放在command用来standalone创建PDF文件中。

但我对该命令中某些长度的不同行为感到惊讶。

为了说明我的问题,这里有一个 MWE subfile.tex::

\documentclass{standalone} 


\begin{document}
\begin{tabular}{p{\linewidth}}

    textheight:\the\textheight textwidth:\the\textwidth \ line:\the\linewidth and the baseline: \the\baselineskip \\
 An other line.

\end{tabular}
\end{document}

main.tex

\documentclass{article}

\usepackage{standalone}             %
    \standaloneconfig{build={command={\latex\space\latexoptions\space\quote\commandStandaloneBuild\string\input{\file}\quote} }
        }

    \makeatletter
    \newcommand{\commandStandaloneBuild}{%
        \string\AtBeginDocument\string{
            \string\setlength\string{\string\textwidth\string}\string{\the\textwidth\string}
            \string\setlength\string{\string\textheight\string}\string{\the\textheight\string}
            \string\setlength\string{\string\linewidth\string}\string{\the\linewidth\string}
            \string\setlength\string{\string\baselineskip\string}\string{\the\baselineskip\string}
        \string}
    }   
    \makeatother


\begin{document}

    \setlength{\baselineskip}{30pt} 
baseline: \the\baselineskip
\setlength{\linewidth}{200pt} 
the line :\the\linewidth
\setlength{\textwidth}{450pt}
the textwidth :\the\textwidth
\setlength{\textheight}{500pt}
the textheight :\the\textheight


    \begin{figure}[h]
        \centering
        \includestandalone[mode=build,
            ]{subfile}
        \caption{test}
        \label{lab}
    \end{figure}

now the command is :\commandStandaloneBuild
\end{document}

在这种情况下,独立构建的结果是 和linewidth,而它应该分别是和345pt。但是和是正确的。因此,我检查了 和 ,我发现:baseline12pt200pt30pttextwidthtextheightmain.log

runsystem(pdflatex -interaction=batchmode -shell-escape -jobname 'subfile' '\AtBeginDocument{ \setlength{\textwidth}{450.0pt} \setlength{\textheight}{500.0pt}\setlength{\linewidth}{345.0pt}\setlength{\baselineskip}{12.0pt} } \input{subfile}')...executed.

因此,子文件给出的信息是构建命令给出的信息,但主文件中“打印”的命令不是传递给独立构建的命令。

因此,为了解决我的问题,我有两个相关问题:如何使构建命令对所有的行为都相同length?为什么会有这种差异?

答案1

正如 David Carlisle 和 Ulrike Fischer 所提到的,变量\linewidth\baselineskip是内部 latex 参数。因此,当 latex 计算它们时,必须在文档开始之前设置它们。

因此,一个简单的解决方法是在序言中创建本地临时长度。

% Define two new length to store the local values of linewidth and baselineskip.
\newlength{\locallinewidth}
\newlength{\localbaselineskip}

要更新这些值,需要一个新命令。

% Update the local values.
\newcommand{\UpdateLineAndBaseLength}{
    \setlength{\localbaselineskip}{\the\baselineskip}
    \setlength{\locallinewidth}{\the\linewidth}
}

因此,我们可以改变\commandStandaloneBuild以纳入新的变量。

\string\setlength\string{\string\linewidth\string}\string{\the\locallinewidth\string}
\string\setlength\string{\string\baselineskip\string}\string{\the\localbaselineskip\string}

然后调用之前的新命令即可\begin{figure}解决问题。

\UpdateLineAndBaseLength{}
\begin{figure}[h]
    \centering
    \includestandalone[mode=build,
        ]{subfile}
    \caption{test}
    \label{lab}
\end{figure}

相关内容