
理想情況下,我希望能夠在\section
許多環境(定理、逐項、枚舉等)之前和之後、\item
列表中的 s 之間、顯示式數學之前和之後以及其他幾個地方跳過行。它幫助我保持原始碼井井有條。
對我來說不幸的是,Donald Knuth 認為跳過的行應該在原始碼中具有語義意義。我確信他這樣做有充分的理由,但如果開始一個新段落需要\par
命令,我個人會更高興。
我知道程式碼組織的傳統解決方案是%
在由於非語義原因而跳過的行的開頭放置一個符號;但是,我發現這些額外的%
符號使我的程式碼變得混亂,並且不如純粹跳過的行有用。
問題:
在傳統的 LaTeX 文件中,哪些位置(如果有)可以跳過一行或多行而不影響輸出?我認識到,如果允許重新定義,任何地方都不可能是完全安全的,因此假設正在使用標準或 AMS 文檔類之一,沒有加載任何其他包,並且序言中的唯一定義是定義定理類型。
一個額外的限制,以區分這個問題什麼時候可以安全地添加空行?:假設我不知道各種指令和環境如何影響垂直模式。如果您願意,我的問題是要求提供一個(不一定是全面的)列表,列出哪些命令/環境會影響垂直模式,以便之前和/或之後的跳行將不起作用。
答案1
連結問題中的答案有點誤導,因為垂直模式是一個技術實現細節,與暗示的使用者行為並不緊密相關。例如,您在列表之後處於垂直模式,但 Latex 付出了很大的努力來使空白行產生效果,以便列表行為與顯示數學行為相匹配(在顯示之後您處於水平模式)。
首先,該行為並未嵌入 TeX 中,它取決於目前的 catcode 設定。
TeX 會移除每行中的所有空白,包括系統相關的行尾標記(這部分是不是可自訂)然後插入\endlinechar
已設定的 if 。通常在 LaTeX 中是 ^M。然後使用 的 catcode,\endlinechar
就像它是檔案中的普通字元一樣。通常它是catcode 5,這是一種特殊的catcode,它使單個^M 充當空格,但兩個^M 充當空格\par
(省略一些細節)。但是,當 ^M 的作用類似於空格時,您可以將其設置為 catcode 10,或者進行設置,\endlinechar=32
然後在每個行尾產生一個空格(並且沒有行尾)。
\documentclass{article}
\begin{document}\endlinechar=32
One two three
four
five
\begin{itemize}
\item one
two \item
three
\end{itemize}
\end{document}
但是,如果您不想這樣做並保留標準設置,則規則應該很簡單,在要結束當前段落的位置使用空白行。
所以空行是錯誤在數學模式下。
空白行在垂直(par 模式)下使段落標記 \par 結束(但由於 a\par
在垂直列表的開頭被忽略,因此可以在 等的開頭\parbox
以及 minipage
每個段落,
你應該絕不在顯示數學之前放置一個空白行(TeX 認為顯示數學應該始終位於段落內而不是段落之間,因此如果您在之前使用空行\[
或內部使用任何其他內容$$
,那麼 TeX 將插入相當於\indent$$
恢復操作的程式碼,並且您會看到一條虛假的白線,其中包含一個縮進框,但沒有文本,在顯示之前看起來像是虛假的垂直空間。
您是否應該在顯示數學環境之後放置一個空白行,這取決於以下文字是新段落還是顯示先前段落的延續。
如果您在乳膠清單環境之前或之後放置一個空行,則環境後面的文字將開始一個新段落,因此通常會縮進,如果您不在清單之前或之後放置空行,則以下文字將被視為延續列表之前的段落。
幾乎所有乳膠結構的定位方式都與字母相同X
。人們經常問如何使包含的圖像並排或一個在另一個之上。答案是這樣的X
:
X X
將兩個 X 並排放置
X
X
將X
一個放在另一個段落之上。您可以替換X
為\includegraphics
or\fbox
或\parbox
or ,\begin{tabular}...\end{tabular}
並且與空白行的相同互動也適用。
答案2
我學會了透過在短語之後(即標點符號之後)分割行來組織我的資料。這樣,大多數編輯就變成了打亂行,文字編輯器通常對此有很好的支援。作為額外的好處,版本控制系統還可以在更改的行的基礎上工作,因此這是一個很好的匹配(例如,添加一個單詞不會因重新填充段落而導致十幾個更改;更改很容易發現)。將例如文章保持在一起並裝訂在一起會導致像狗一樣的錯誤或容易發現的錯誤(無法搜尋)。
我主要以相同的方式編寫方程,排列等於(如果有多個),拆分並縮進較長的項,如果出現長因子,則再次縮進它們,等等。
總之,我努力保持原始程式碼的縮進,就像縮排一個給定非常緊的邊距的程式一樣(LaTeX 比用 C 編寫的數學表達式要冗長得多)。自然來源空白很少會產生不必要的段落分隔符,有時必須以 % 結束行,以進行邏輯分割,而不會導致不必要的空白。
無論如何,這是源代碼。它是供人們閱讀的,特別是不僅僅是作者。任何非標準的內容都會使文件難以閱讀,難以重複使用或與其他文字集成,幾乎不可能與其他人分享。