我已经理解了\begin{figure} ... \end{figure}
定义一个环境, 然后
环境将其内容放在 TeX 组内,以便环境内使用的命令不会“泄漏”——上面的环境将其效果限制在其自身的内容(和
monoblock
之间的内容)内,这正是您对这种事情所需要的。\begin{monoblock}
\end{monoblock}
但是当我编译(pdflatex
)以下内容时:
\documentclass{article}
\usepackage{graphicx}
\usepackage{caption,subcaption}
\usepackage{comment}
\begin{document}
\begin{figure}
\newlength{\thisFigWidth}
\setlength{\thisFigWidth}{0.4\textwidth}
\centering
\begin{subfigure}{\thisFigWidth}
\includegraphics[width=1.0\textwidth]{example-image-a}
\end{subfigure}
\begin{subfigure}{\thisFigWidth}
\includegraphics[width=1.0\textwidth]{example-image-b}
\end{subfigure}
\end{figure}
\begin{figure}
\newlength{\thisFigWidth}
\setlength{\thisFigWidth}{0.3\textwidth}
\centering
\begin{subfigure}{\thisFigWidth}
\includegraphics[width=1.0\textwidth]{example-image-a}
\end{subfigure}
\begin{subfigure}{\thisFigWidth}
\includegraphics[width=1.0\textwidth]{example-image-b}
\end{subfigure}
\end{figure}
\end{document}
我明白了
! LaTeX Error: Command \thisFigWidth already defined.
Or name \end... illegal, see p.192 of the manual.
答案1
\newlength{\thisFigWidth}
只需在文档前言中使用单个字符,并在figure
环境中设置长度。根据 TeX 的作用域规则,环境一旦环境结束,对注册表的记录就会被遗忘。
\documentclass{article}
\usepackage{graphicx}
\usepackage{caption,subcaption}
\usepackage{comment}
\newlength{\thisFigWidth}
\begin{document}
\begin{figure}
\setlength{\thisFigWidth}{0.4\textwidth}
\centering
\begin{subfigure}{\thisFigWidth}
\includegraphics[width=1.0\textwidth]{example-image-a}
\end{subfigure}
\begin{subfigure}{\thisFigWidth}
\includegraphics[width=1.0\textwidth]{example-image-b}
\end{subfigure}
\end{figure}
\begin{figure}
\setlength{\thisFigWidth}{0.3\textwidth}
\centering
\begin{subfigure}{\thisFigWidth}
\includegraphics[width=1.0\textwidth]{example-image-a}
\end{subfigure}
\begin{subfigure}{\thisFigWidth}
\includegraphics[width=1.0\textwidth]{example-image-b}
\end{subfigure}
\end{figure}
\end{document}
您可能希望根据文本宽度为寄存器提供一个默认值。在这种情况下,请执行以下操作
\newlength{\thisFigWidth}
\AtBeginDocument{\setlength{\thisFigWidth}{0.5\textwidth}}
在文档开始时执行此操作可确保考虑到精确值\textwidth
(在序言中它不一定具有最终值)。
为什么指令不\newlength
遵守作用域规则?因为\newlength
分配了一个新的寄存器(它们的数量是有限的),我们不希望同一个寄存器被分配两次,因为存储在其中的值将变得不可预测。因此\newlength
指令是全球的. 但您不需要在每个figure
环境中都分配一个新的寄存器:只需一个就足够了。