使用 \vtop 会影响 \intertext 的缩进

使用 \vtop 会影响 \intertext 的缩进

我正在使用\iteminput解决方案中的宏如何调整宏来尊重当前的\linewidth?导入其他 TeX 文件的内容。但是,这似乎影响了文本的缩进\intertext{}。下面的红色文本就是问题所在。

使用常规\input方法时,效果很好,文本按预期左对齐,如 (a) 所示。但是,使用宏时,\iteminput文本\intertext向右移动,如 (b) 所示:

在此处输入图片描述

我发现,如果我\vtop{}\iteminput宏中删除,我就会得到所需的行为。但由于这是来自埃格尔解决方案,我不愿意这样做,因为不知道这是否会导致其他问题。

参考:

代码:

\documentclass{article}
\usepackage{showframe}
\usepackage{xcolor}% to highlight the problem area in the output
\usepackage[fleqn]{amsmath}
\usepackage{enumitem}
\usepackage{filecontents}

\begin{filecontents*}{foo.tex}
    Two well known equations are:
    \begin{alignat*}{3}
        E & = mc^2 \\
        \intertext{\textcolor{red}{and}}
        F &= ma
    \end{alignat*}
\end{filecontents*}


\newcommand{\MyInput}[1]{%  
    \begingroup%           The grouping here is not currently causing a problem.
        \input{#1}%        But do need grouping here (for a unrelated reason).
    \endgroup%             
}%

% https://tex.stackexchange.com/questions/18247/how-to-adjust-macro-to-respect-current-linewidth/
\newcommand{\iteminput}[2][\topskip-1bp]{%
    \leavevmode%
    \vtop{%  Removing this fixs the problem.
        \hsize=\noexpand\linewidth\hrule height 0pt\kern-\dimexpr#1\relax%
        \MyInput{#2}%
    }%
}%

\begin{document}
\begin{enumerate}[label={(\alph*)}]
    \item \input{foo}            % This works great
    \item \iteminput[2.5ex]{foo} % This shifts "and" to right!!
\end{enumerate}
\end{document}

答案1

问题是最初的解决方案已经是错误的,并且在这种特殊情况下它会显示出来。\vtop不是 LaTeX 命令,所以如果你使用它,你需要完全理解它的作用和不的作用。

重要的是它没有做什么:它没有设置一个新的框画廊,忽略任何外部情况,例如在枚举内部。因此,这个事实在内部仍然可见,\intertext因此假定它必须缩进其文本。然而,文本已经缩进,原因很简单,因为整个框都是缩进的。所以一个快速修复仅适用于您的具体情况将会

\makeatletter
% http://tex.stackexchange.com/questions/18247/how-to-adjust-macro-to-respect-current-linewidth/
\newcommand{\iteminput}[2][\topskip-1bp]{%
    \leavevmode%
    \vtop{%  Removing this fixs the problem.
        \hsize=\noexpand\linewidth\hrule height 0pt\kern-\dimexpr#1\relax%
       \@totalleftmargin\z@   % cancel any line indentation
        \MyInput{#2}%
    }%
}%
\makeatother

但这当然也是不对的,通过观察我们可以看出\@arrayparboxrestore在这种情况下 LaTeX 真正重置了什么。

归根结底,对于一般解决方案,您最好使用 minipage 环境(它可以处理所有这些问题,因为它可以与其他 LaTeX 构造一起使用)。或者,您真的必须付出更多努力才能将您的命令与 LaTeX 的内部结构融合在一起。

相关内容