我正在处理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
。但是和是正确的。因此,我检查了 和 ,我发现:baseline
12pt
200pt
30pt
textwidth
textheight
main.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}