我的文檔中的段落之間有間距,我認為我已經能夠追溯到我定義的自訂環境。
\makeatletter
\def\remarkname{Remark}
\newcounter{counter@myremarks}
\newenvironment{remark}{\par\vspace{0.2cm}\par\noindent\begingroup\small%
\addtocounter{counter@myremarks}{1}%
\textbf{\remarkname~\arabic{counter@myremarks}.}~~\ignorespacesandallpars}{%
\endgroup\par\vspace{0.2cm}\par\@afterindentfalse\@afterheading}
\newenvironment{remark*}{\par\vspace{0.2cm}\par\noindent\begingroup\small%
\textbf{\remarkname.}~~\ignorespacesandallpars}{%
\endgroup\par\vspace{0.2cm}\par\@afterindentfalse\@afterheading}
\makeatother
該\ignorespacesandallpars
命令由 Martin Scharrer 執行,來自之前的 StackExchange 問題。
(我知道有很多其他方法 - 包或 amsmath 中的定義 - 來獲得這種環境,但我還沒有找到我完全滿意的東西,目前使用自訂。)
使用這個定義後,我想我注意到間距有點古怪,並且需要額外的 \smallskip 或 \medskip 命令。我想知道我做錯了什麼。
是我的問題在其他地方,還是我在這裡做錯了什麼?
更新:以下程式碼片段說明了其中一個問題(第二個逐項清單之前的間距與第一個不一樣):
\documentclass{article}
\makeatletter
\def\ignorespacesandallpars{%
\begingroup
\catcode13=10
\@ifnextchar\par
{\endgroup\expandafter\ignorespacesandallpars\@gobble}%
{\endgroup}%
}
\def\remarkname{Remark}
\newenvironment{remark*}{\par\vspace{0.2cm}\par\noindent\begingroup\small%
\textbf{\remarkname.}~~\ignorespacesandallpars}{%
\endgroup\par\vspace{0.2cm}\par\@afterindentfalse\@afterheading}
\makeatother
\begin{document}
Following is an item list
\begin{itemize}
\item One
\item ...
\end{itemize}
\begin{remark*}
Now a remark.
\end{remark*}
And another item list
\begin{itemize}
\item One
\item ...
\end{itemize}
\end{document}
答案1
這\@afterheading
就是切片指令不應該在群組中使用的原因之一;-)
它普遍設置\@nobreaktrue
然後本地設定\everypar
撤消它。因此,在您的環境結束(撤消設定\everypar
)之後,您必須\@nobreaktrue
坐在那裡等待下一個清單來捕獲它...
並使\@nobreak
清單不插入\topsep
...
為了避免這種混亂,您必須確保\@afterheading
在您的環境之外調用。
在您的定義中替換\@afterheading
為會將您的環境定義的群組移到外部並重新出現。\aftergroup\@afterheading
\@afterheading
\topsep