在我的讲座中,我定义了一个\example
排版命令……示例与段落内容略有不同。有时它们包含文本,有时包含表格等。出于某些原因,我\subparagraph
在命令定义中使用,因此我需要在它后面添加一些垂直间距以与后面的文本分开。由于我不想在使用环境时添加更多内容vmode
,因此我有条件地将其设置为hmode
仅。当示例后有分段命令时,我的问题就出现了,如下所示:
\documentclass{scrartcl}
\newcommand{\example}[1]{\subparagraph{Exemple :\hspace{-1.25ex}} #1\ifhmode\par\leavevmode\fi}
\begin{document}
\subsection*{Bad spacing}
Some text.
\example{Some example text.}
\subsection*{Correct spacing}
Some more text.
\example{Some example text.}
\vspace{-\baselineskip}
\subsection*{Test}
Yet another text.
\example{Some example text.}
Final text.
\end{document}
如您所见,第一个“示例”后的垂直间距太大,我在第二个示例中使用 进行了更正\vspace{-\baselineskip}
。
当第一个示例之后有第二个示例时,也会发生此问题,但我认为这是由于我的\example
命令的分段性质而导致的同一个问题。
有没有办法在所有情况下都有正确的间距(包括当vmode
里面有一个环境时\example{}
,例如center
)?
答案1
我不太确定你到底想问什么,但这里有一些建议:
- 当 TeX 看到一个字符时,它将以水平模式启动,因此您无需检查
vmode
或hmode
。 - 用于
\addvspace
垂直间距。
老实说,我个人会使用这样的包,exsheets
或者如果你的讲座包含数学,我会使用该amsthm
包来创建示例环境。
\documentclass{scrartcl}
\usepackage[latin]{babel}
\usepackage{lipsum}
\newlength\exampletop
\setlength\exampletop\baselineskip
\newcommand{\example}[1]{%
\par
\addvspace\exampletop
\leavevmode
\bgroup
\sffamily
\bfseries
Example:
\egroup
#1
\par
\vskip10pt
}
\begin{document}
\subsection{Test}
Final text.
\subparagraph{Example:}Subparagraph
\subparagraph{Example:}Subparagraph
\example{ \lipsum[1]}
\example{Some example text.
My new equation
$$a = b + c$$}
\section{Test}
\end{document}
答案2
因此感谢亚尼斯·拉扎里德斯 (Yannis Lazarides) 回答,实际的解决方案是这样的:
\newcommand{\example}[1]{\subparagraph{Exemple :\hspace{-1.25ex}} #1\ifhmode\vskip\baselineskip\fi}
即使用\vskip
而不是\par
以便在不需要时合并垂直间距。