在“图形”环境中定义的命令从外部可见吗?

在“图形”环境中定义的命令从外部可见吗?

我已经理解了\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环境中都分配一个新的寄存器:只需一个就足够了。

相关内容