我正在尝试将一些图形文件设置为独立的 .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 也回答了。我基本上同意他的观点。