在段落末尾使用 `\vspace` 创建空白新行

在段落末尾使用 `\vspace` 创建空白新行
\documentclass[11pt]{article} % Document class
\newcommand{\zzitem}[2]{%
\begin{description}
    \item[\textbf{#1}]: #2
    \vspace{-.75em}
\end{description}
}       

\pagestyle{empty}

\begin{document}
    \zzitem{Relevant Courses}{Calculus III, AP Computer Science, Business Statistics, Financial Accounting}
    \zzitem{Languages}{Russian, fluent; Spanish, conversational}
\end{document}

以下是上述 LaTeX 的输出:

在此处输入图片描述

但是,如果我仅删除第一行的一个字母,则会得到以下结果:

在此处输入图片描述

这是我想要的输出,但如果我要添加那封信。是什么导致了这种行为,它创建新行,但没有将任何内容推送到该新行?

答案1

#1和之间有一个空格\vspace(由换行符引起)。因此有问题的段落以“Accounting<space><whatsit>”结尾。“whatsit”是放置在段落中的不可见对象,它会在最终的行后添加垂直空间。你很不幸,但你就是造成这种情况的罪魁祸首。

之前有一个空行\vspace{-0.75em}即可(或\par之后有一个空行#2,效果完全相同)。

description但是,如果您想删除它产生的空间,是否还需要单个项目呢?

\documentclass[11pt]{article}

\newcommand{\zzitem}[2]{%
  \par
  \addvspace{\topsep}%
  \noindent
  \hangindent=\leftmargini
  \textbf{#1}: #2\par
  \addvspace{\topsep}%
}

\pagestyle{empty}

\begin{document}

\zzitem{Relevant Courses}{Calculus III, AP Computer Science, 
  Business Statistics, Financial Accounting}

\zzitem{Languages}{Russian, fluent; Spanish, conversational}

Just for comparison, here's what you get with a \emph{single} description

\begin{description}
\item[Relevant Courses\normalfont:] Calculus III, AP Computer Science, 
  Business Statistics, Financial Accounting

\item[Languages\normalfont:] Russian, fluent; Spanish, conversational
\end{description}

\end{document}

在此处输入图片描述

答案2

暂且不论

  • 提供的代码确实不是产生指示的输出(我必须修复第一行的注释并调整线宽以\addtolength{\textwidth}{1.6in}获得预期的结果)。
  • 格式化方法值得怀疑

仍然存在理解问题为什么多余的空格会导致创建新行。毕竟,这在 LaTeX 文档中并不常见。

原因在于它并\vspace没有像很多人想象的那样发挥作用。它确实不是开始新行并插入空格。相反,如果空格出现在段落中间,它会在当前行之后插入空格。您可以通过在 LaTeX¹ 中运行以下命令亲自查看:

A surging, seething, murmuring crowd of beings 
that are human only in name, for to the eye and ear 
they seem naught but savage creatures, animated by 
vile passions and by the lust of vengeance and of hate.
\vspace{1in}
The hour, some little time before sunset, and the place, 
the West Barricade, at the very spot where, a decade 
later, a proud tyrant raised an undying monument to the 
nation’s glory and his own vanity.

\vspace它的巧妙之处在于,无论其前或后是否有空格(本段就是这种情况),它都会给出正确的间距。您可以尝试在%后面hate.或后面放置一个空格{1in},您会看到相同的输出,但是如果您同时放置两个%空格,您将完全没有空格。但这种巧妙是有代价的。如果它位于段落末尾,通常会在那里丢弃的空格将被保留。

令人惊讶的是,egreg 竟然搞错了问题的根源。问题不在于空格后面跟着什么²。事实上,发生的事情是,在命令中执行空格保留的代码\vspace负责在水平列表中放置一个显式空格,否则这个空格会被删除。如果我们有任何其他使用相同机制来避免多余的空格进入输出的命令(例如\label.³) ,我们都会得到相同的结果

因此,最重要的是,为了获得正确的间距,“最佳”解决方案是要么在前面添加一个空白行,\vspace这样它就不会被视为段落的一部分,要么在%后面添加一个空白行#2,这样就没有空间可以保留了。但我认为我还是会使用descriptionegreg 的解决方案中描述的列表,或者,如果你坚持你的结构,我会建立一个单项list环境,并适当设置跳过以格式化你的输出,但由于这超出了问题的范围,我不会在这里提供示例。


  1. 在 LaTeX 的源代码中(texdoc source2e)您会在注释中看到以下内容:

    [例如,\vspace 是否曾在段落中间使用过?]

    答案是肯定的,但可能不是故意的!

  2. 只要我吹毛求疵\vadjust不是插入到主垂直列表中的只是垂直内容的 whatsit。Knuth 最初希望每个人都能自定义他们的 TeX,并在提供的基本内容(\special\write)之外添加其他内容,但这从未发生过(除了我认为,但不记得 TeX-XeT 用于在 LR 和 RL 模式之间切换的特殊代码可能已实现为 whatsits)。

  3. 我必须记住在我的书中讨论的部分中添加有关此问题的警告\label

相关内容