我喜欢我的代码看起来像这样:
\documentclass{article}
\begin{document}
\begin{enumerate}
\item test text
\begin{enumerate}
\item 1
\item 2
\item 3
\item 4
\item 5
\end{enumerate}
\end{enumerate}
\end{document}
为了便于阅读,我喜欢在新环境开始前放置一个空行。在我考虑的特定情况下,空行在第一级枚举的项目和第二级枚举的第一个项目之间添加一些垂直空间。
所以我的问题是:在环境启动之前格式化与空行相关的代码是否有最佳实践?我应该避免吗?我应该注释掉空行吗?
澄清:
我指的是“测试文本”和“1”之间的垂直间距。但是,我并不是在寻求一种方法来删除空白添加的额外空间,我已经知道如何做到这一点。我的理由如下:
由于在新的枚举之前添加空白会添加垂直空间,这意味着该空白行对 TeX 有意义。既然它对 TeX 有意义,那么是否可以仅将其用于格式化代码,还是应该避免使用它?
答案1
TeX 输入中的空行是命令它相当于,\par
所以你不应该把它放在你不想开始新段落的地方。与任何命令一样,如果你出于某种原因想把它放在源文件中,但又不想执行它,那么你需要把它注释掉,但通常更简单的是一开始就不要把它放在那里:-)
答案2
空行导致 LaTeX 将\partopsep
粘性添加到内部enumerate
。enumitem
很容易证明将此参数设置为零会产生相同的输出:
\documentclass{article}
\usepackage{enumitem}
\setlength{\parindent}{0pt}
\begin{document}
Normal setting
\fbox{\begin{minipage}[t]{.4\textwidth}
\begin{enumerate}
\item test text
\begin{enumerate}
\item 1
\item 2
\item 3
\item 4
\item 5
\end{enumerate}
\end{enumerate}
\end{minipage}}
\fbox{\begin{minipage}[t]{.4\textwidth}
\begin{enumerate}
\item test text
\begin{enumerate}
\item 1
\item 2
\item 3
\item 4
\item 5
\end{enumerate}
\end{enumerate}
\end{minipage}}
\bigskip
With zero partopsep
\fbox{\begin{minipage}[t]{.4\textwidth}
\begin{enumerate}[partopsep=0pt]
\item test text
\begin{enumerate}
\item 1
\item 2
\item 3
\item 4
\item 5
\end{enumerate}
\end{enumerate}
\end{minipage}}
\fbox{\begin{minipage}[t]{.4\textwidth}
\begin{enumerate}[]
\item test text
\begin{enumerate}
\item 1
\item 2
\item 3
\item 4
\item 5
\end{enumerate}
\end{enumerate}
\end{minipage}}
\end{document}
我的意见是,不应该有空行,除非你想开始一个新段落。在一般情况下(tabular
并且array
是例外),LaTeX 中的空行非常重要,不应仅仅为了增强源代码的可读性而使用。
百分号即可,无需创建段落分隔符:
\documentclass{article}
\begin{document}
\begin{enumerate}
\item test text
%
\begin{enumerate}
\item 1
\item 2
\item 3
\item 4
\item 5
\end{enumerate}
\end{enumerate}
\end{document}
不过我只想写
\documentclass{article}
\begin{document}
\begin{enumerate}
\item test text
\begin{enumerate}
\item 1
\item 2
\item 3
\item 4
\item 5
\end{enumerate}
\end{enumerate}
\end{document}
缩进更少。当然,这取决于个人喜好。
答案3
你总是可以定义一个宏\eatpar
来“吃掉空行”。但是,我不认为这个解决方案会使代码更具可读性:
\documentclass[twocolumn]{article}
\makeatletter
\newcommand\eatpar{\@ifnextchar\par{\expandafter\eatpar\@gobble}\relax}
\makeatother
\begin{document}
\begin{enumerate}
\item test text
\begin{enumerate}
\item 1
\item 2
\item 3
\item 4
\item 5
\end{enumerate}
\end{enumerate}
\newpage
\begin{enumerate}
\item test text
\eatpar
\begin{enumerate}
\item 1
\item 2
\item 3
\item 4
\item 5
\end{enumerate}
\end{enumerate}
\end{document}
(为了比较,第一个什么都没有。)