用户定义环境后的垂直间距

用户定义环境后的垂直间距

在我的讲座中,我定义了一个\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

我不太确定你到底想问什么,但这里有一些建议:

  1. 当 TeX 看到一个字符时,它将以水平模式启动,因此您无需检查vmodehmode
  2. 用于\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以便在不需要时合并垂直间距。

相关内容