在关于 LaTeX 与 xml 的相对优缺点的几次讨论中,一位 xml 支持者抱怨说,在 LaTeX 中,章节、小节等没有正确关闭,因此很难分辨章节在何处结束。当然,通常可以识别章节的结束,但实际上章节的结束方式有很多种:另一章节的开始、下一章或部分的开始、\endmatter
参考书目、索引等的开始或文档的结束。如果您想编写一个脚本来以某种方式操纵章节(更改它们的顺序、将每个章节写入单独的文件等),这会很困难。当然,小节、段落等也是如此。
对此的一个答案是,在 LaTeX2e 中实际上可以使用分段命令作为环境,并且写入
\begin{section}{Blah blah}
...
\end{section}
而且由于 LaTeX2e 中处理环境的方式,它可以工作。我最近看到几条评论不鼓励将常规命令用作环境,而且似乎在 LaTeX3 中不再可能(另一方面,似乎您将能够定义环境section
而不会与命令发生冲突\section
)。
我想知道大家对于使用分段命令作为环境有什么看法。这是一个好主意吗?可以吗?还是不应该这样做?
答案1
一般来说这样做是可以的。我曾经开始编写一个包来支持这种使用方式,并自动嵌套部分等等。所以你可以写
\begin{relsec}{This is a section}
blah blah
\begin{relsec}{This is a sub section}
meep meep
\end{relsec}
\begin{relsec}{This is a sub section}
meep meep
\end{relsec}
\end{relsec}
最后,我发现写LaTeX 文档使用这种语法(虽然可能只是我一个人),所以我从未完成过这个项目(它不是一个大软件包)。不过,我偶尔会想再次清理代码——它似乎总是人们(认为他们可能)觉得有用的东西。
需要注意的是:当您使用环境表单时,会创建一个组!如果某些软件包作者没有预料到这一点,您可能会遇到奇怪的交叉引用或编号或类似行为。
答案2
我不会这么做。你添加了很多不必要的组,而且会产生不可预测的副作用,但收获不大。如果你真的想标记组件的开始/结束,我建议在注释行中使用标记,例如 dtx-files 中的标记%<sec1> ... %</sec1>
。
答案3
ConTeXt 现在支持\startsection
...\stopsection
环境。这允许使用更多键值驱动的语法:
\startsection
[ title={Section title},
reference=sec:test,
marking={Page mark},
bookmark={Bookmark text},
]
....
\stopsection
还可以添加未使用的键,然后author={Chapter Author}
在排版章节标题时使用该值。
答案4
一种解释可能是避免末日金字塔在撰写包含许多章节和段落的长篇文档时。
比较一下:
\begin{section}{Section One}
...
\begin{subsection}{Subsection One}
...
\begin{subsubsection}{Subsubsection One}
...
\begin{paragraph}{This is First Paragraph}
...
\begin{figure}[h]
\centering
\includegraphics[...]{...}
\caption{...}
\label{fig:...}
\end{figure}
...
\end{paragraph}
\end{subsubsection}
\end{subsection}
\end{section}
对此:
\section{Section One}
...
\subsection{Subsection One}
...
\subsubsection{Subsubsection One}
...
\paragraph{This is First Paragraph}
...
\begin{figure}[h]
\centering
\includegraphics[...]{...}
\caption{...}
\label{fig:...}
\end{figure}
...
在一篇很长的文章中,段落中有大量文字,还有许多图片,第二种格式的可读性更强。即使你省略第一种格式的缩进,它仍然比第一种格式更长,可读性更差。