的组合\addvspace{x}\addvspace{x}
将导致跳过x
,但\addvspace{x}\noindent \addvspace{x}
会给出 2 次x
跳过。
\documentclass{scrartcl}
\newenvironment{env}{%
\par\addvspace{2\baselineskip}%
\hspace*{2em}%
\begin{minipage}{0.5\textwidth}%
}{%
\end{minipage}%
\par\addvspace{2\baselineskip}%
\noindent\ignorespacesafterend%
}
\begin{document}
Line of text Line of text Line of text Line of text and
\begin{env}
--- \verb+env+ ---
\end{env}
no indent here. Line of text Line of text Line of text.
Next par (with indent). Line of text Line of text Line of text.
\begin{env}
--- \verb+env+ ---
\end{env}
Next par (with indent). Line of text Line of text Line of text.
\begin{env}
--- Two \verb+env+s following ---
\end{env}
\begin{env}
--- dont work with \verb+\addvspace+ ---
\end{env}
\end{document}
此示例给出了双倍的空格。如果我注释掉\noindent\ignorespacesafterend%
定义中的行{env}
,则会出现一个空格,这是所需的结果,但随后该行将no indent here ...
缩进,我认为这是不正确的。
是否有可能使其{env}
表现得像例如{equation}
?
答案1
开始\noindent
一个段落,如果紧接着一个空行,它将是一个空段落,但仍会阻止\addvspace
向后查看前一个\addvspace
。因此,这不是抑制段落缩进的正确方法。
你应该做的是\@endparenv
设置一个布尔开关来发出内部特殊处理的信号\end{...}
。即,
\makeatletter
\newenvironment{env}{%
\par\addvspace{2\baselineskip}%
\hspace*{2em}%
\begin{minipage}{0.5\textwidth}%
}{%
\end{minipage}%
\par\addvspace{2\baselineskip}%
\@endpetrue % <-- this is needed
}
\makeatother
正如评论中提到的那样,使这种“最终魔法”发挥作用的处理过程得到了很好的解释这里。