我想在命令中用 替换\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。