使用输入文件时线宽重置

使用输入文件时线宽重置

我正在尝试将一些图形文件设置为独立的 .tex 文件,然后将它们输入到主文件中。这些文件看起来像这样

\ifx \plotwidth \undefined
 \newlength{\plotwidth} \setlength{\plotwidth}{0.9\linewidth} 
\else \fi% width of the total figure
\rule{\linewidth}{\plotwidth}% figure goes here

我的主要想法是使用 设置标准宽度\linewidth,并能够在\plotwidth输入文件之前定义 来更改主文件中的大小。但是,当我在同一个文件中第二次调用图形时,由于某种原因\plotwidth已定义但其长度为零。如本例所示

\documentclass{article}

\begin{document}

\begin{figure}
\input{fig.tex}
\caption{Test}
\end{figure}

\begin{figure}
\input{fig.tex}
\caption{Test}
\end{figure}

\end{document}

有人能解释一下为什么这不起作用,以及如何解决它吗?

答案1

问题是\newlength是一个“全局”命令;因此在第一个图形之后,\plotwidth被定义。然而\setlength是一个“局部”命令,因此它的设置在figure环境之后被遗忘并重置为初始值 0pt。

一般来说\newlength应该是一个前导命令。你可以将它全局设置为一个标记值,比如 -1000pt,

\newlength{\plotwidth}
\setlength{\plotwidth}{-1000pt}

然后检查这个值

\ifdim\plotwidth=-1000pt

如果fig.tex你说

\begin{figure}
\setlength{\plotwidth}{100pt}
\input{fig}

那么中的代码fig.tex就会知道\plotwidth已经设置了。

让我们举个例子。你的fig.tex文件包含

\ifdim\plotwidth=-1000pt
  \setlength{\figwidth}{0.9\linewidth}
\else
  \setlength{\figwidth}{\plotwidth}
\fi
\includegraphics[width=\figwidth]{somefigure}

(为了获得更大的灵活性,参数将代替\figwidth) 。\linewidth

你的主要文件可以是

\documentclass{article}

\newlength{\plotwidth}
\setlength{\plotwidth}{-1000pt}
\newlength{\figwidth}

\begin{document}

\begin{figure}
\input{fig.tex}
\caption{Test (this figure is 90\% of the line width)}
\end{figure}

\begin{figure}
\setlength{\plotwidth}{100pt}
\input{fig.tex}
\caption{Test (this figure is 100pt wide)}
\end{figure}

\end{document}

答案2

问题是 是\newlength全局的,但\setlength是局部的。第一次输入主文档时 fig.tex\plotwidth未定义,因此会创建并设置新的长度。这发生在 TeX 组内,因此设置是输入文件的局部设置。然后该组结束并\plotwidth恢复到其初始设置0.0pt

第二次文件名输入fig.tex\plotwidth 定义,所以\setlength分支不展开。结果是\plotwidth仍为0.0pt

\plotwidth解决方案是在主 tex 文件中 赋予一个值。

此外,如果您希望fig.tex文件成为独立的 tex 文件,最简单的方法是使用standalone文档类和包。这是您的 MWE:

图.tex:

\documentclass{standalone}
\begin{document}
\ifx \plotwidth \undefined
 \newlength{\plotwidth} \setlength{\plotwidth}{0.9\linewidth} 
\else \fi% width of the total figure

\rule{\plotwidth}{\plotwidth}% figure goes here
\end{document}

主要.tex:

\documentclass{article}
\usepackage{standalone}

\newlength{\plotwidth} \setlength{\plotwidth}{0.5\linewidth}
\begin{document}

\begin{figure}
\include{fig}
\caption{Test}
\end{figure}


\begin{figure}
\include{fig}
\caption{Test}
\end{figure}

\end{document}

\showthe\plotwidth文件中的 将停止扩展并显示 的当前值\plotwidth。非常适合调试。

当我读完这篇文章时,我注意到 egreg 也回答了。我基本上同意他的观点。

相关内容