標題沒有那麼描述性。我嘗試編寫一個自訂remark
樣式的amsthm
環境,它可以將參數作為標題(我不需要引用功能)。我想透過避免trivlist
. remark
-風格定理環境.5\topsep
在環境前後都有空間。但這在像itemize
.這是我所擁有的:
\documentclass{article}
\usepackage{lipsum} % for testing
% paragraph environment, takes one mandatory header text
\newenvironment{para}[1]{
% add space before environment
\par\addvspace{.5\topsep}
% header text
\noindent\textit{#1.}%
% default rubber space after header text and ignore following spaces
\hspace*{5pt plus 1pt minus 1pt}\ignorespaces
}{
% add space after environment
\par\addvspace{.5\topsep}
}
\begin{document}
\lipsum[66]
\begin{para}{Looks good}
\lipsum[66]
\end{para}
\lipsum[66]
\begin{itemize}
\item \lipsum[66]
Compare \verb|\parsep| above and the \verb|\parsep+.5\topsep| below.
\begin{para}{Looks weird}
\lipsum[66]
\end{para}
\lipsum[66]
\end{itemize}
\end{document}
正如您所看到的,在列表環境中,.5\topsep
被添加到非零值中\parsep
,從而產生更大的間隙。原始amsthm
環境透過採用 Latex 的列表機制(設定\@topsep
和\@topsepadd
到所需的間距.5\topsep
)來避免這種情況。同樣,如果para
在列表環境中調用,我寧願不添加任何空格。有沒有辦法偵測是否處於清單環境?或者有更優雅的解決方案嗎?
編輯:新增編譯檔的圖片。
答案1
作為大衛卡萊爾說,您不應該使用它\topsep
來定義您的環境,因為它是由清單環境設定和重置的,並且您的環境不會給出一致的行為(因為它取決於經常動態更改的長度)。您可能想要對一個值進行硬編碼(如果您願意,可以將其作為膠水,但我只會接受,4pt
因為這似乎是所需的量)。
\parskip
要處理可能存在或不存在的效果(在清單環境中,\parskip
設定為等於\parsep
),您可以透過新增額外的 vspace 來取消它。以下內容可能會滿足您的要求:
\documentclass{article}
\usepackage{lipsum} % for testing
% paragraph environment, takes one mandatory header text
\newenvironment{para}[1]{
% add space before environment
\par\addvspace{4pt}\addvspace{-\parskip}
% header text
\noindent\textit{#1.}%
% default rubber space after header text and ignore following spaces
\hspace*{5pt plus 1pt minus 1pt}\ignorespaces
}{
% add space after environment
\par\addvspace{4pt}\addvspace{-\parskip}
}
\begin{document}
\lipsum[66]
\begin{para}{Looks good}
\lipsum[66]
\end{para}
\lipsum[66]
\begin{itemize}
\item \lipsum[66]
Compare \verb|\parsep| above and the \verb|\parsep+.5\topsep| below.
\begin{para}{Looks weird}
\lipsum[66]
\end{para}
\lipsum[66]
\end{itemize}
\end{document}