\addvspace 不能替代 \vspace

\addvspace 不能替代 \vspace

我想在命令中用 替换\vspace\addvspace这样做时,我得到了“出现问题——可能缺少 \item。”的错误。我希望得到解释为什么会发生这种情况以及如何修复我的\fieldinfo命令(如下所示)以使用\addvspace

我尝试使用\protect\addvspace,但是也不起作用。

谢谢你的帮助!

\documentclass{book}

\usepackage{tabularx}

% addvspace instead of vspace fails!
\newcommand{\fieldinfo}[2]{\addvspace{\baselineskip}\noindent\begin{tabularx}{\linewidth}{p{0.25in}X}%
        #1  &  #2 \\%
\end{tabularx} \\%
\addvspace{\baselineskip} \\ }%

\begin{document}
A, magna. Donec vehicula augue eu neque. Pellentesque habitant morbi
tristique senectus et netus et malesuada fames ac turpis egestas. Mauris.

\fieldinfo{A}{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
tristique senectus et netus et malesuada fames ac turpis egestas. Mauris.}

\fieldinfo{B}{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
tristique senectus et netus et malesuada fames ac turpis egestas. Mauris.}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum.
\end{document}

答案1

您使用\addvspace失败,因为您没有在垂直模式下使用它。以下是 的定义\addvspace

\def\addvspace#1{%
  \ifvmode
    \if@minipage\else
      \ifdim \lastskip =\z@
        \vskip #1\relax
      \else
      \@tempskipb#1\relax
        \@xaddvskip
      \fi
    \fi
  \else
    \@noitemerr
  \fi}

如您所见,当不处于垂直模式时,\@noitemrr会被调用,并产生错误消息“出现问题 - 可能缺少 \item”。

为了能够使用,\addvspace您需要进入 vmode,例如,可以通过使用以下命令来完成\par

\documentclass{book}
\usepackage{tabularx}

\newcommand{\fieldinfo}[2]{
  \addvspace{\baselineskip}
  \noindent\begin{tabularx}{\linewidth}{p{0.25in}X}%
        #1  &  #2 \\%
\end{tabularx}%
\par\addvspace{\baselineskip}}%

\begin{document}
A, magna. Donec vehicula augue eu neque. Pellentesque habitant morbi
tristique senectus et netus et malesuada fames ac turpis egestas. Mauris.

\fieldinfo{A}{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
tristique senectus et netus et malesuada fames ac turpis egestas. Mauris.}

\fieldinfo{B}{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
tristique senectus et netus et malesuada fames ac turpis egestas. Mauris.}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum.
\end{document}

当然,你不能\\在之后使用\addvpace{\baselineskip}

答案2

出现令人困惑的错误是因为你没有\addvspace在垂直模式下使用。尝试

\newcommand{\fieldinfo}[2]{\addvspace{\baselineskip}\noindent\begin{tabularx}{\linewidth}{p{0.25in}X}%
        #1  &  #2 \\%
\end{tabularx}\par
\addvspace{\baselineskip}}

这样就结束了段落,然后在后面添加了 vspace。

相关内容