![自动段落编号(\everypar 仅适用于段落,不适用于 \section 等)](https://linux22.com/image/318032/%E8%87%AA%E5%8A%A8%E6%AE%B5%E8%90%BD%E7%BC%96%E5%8F%B7%EF%BC%88%5Ceverypar%20%E4%BB%85%E9%80%82%E7%94%A8%E4%BA%8E%E6%AE%B5%E8%90%BD%EF%BC%8C%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%20%5Csection%20%E7%AD%89%EF%BC%89.png)
我想写一份规范,每个段落应该自动地是编号我在一本关于健身训练的书中也发现了类似的东西:
我准备了一个小型的 MWE(双面布局):
\documentclass{book}
\usepackage[english]{babel}
\usepackage[toc]{blindtext}
\begin{document}
\Blinddocument
\end{document}
遗憾的是,我没有解决方案的起点。手动解决方案是使用边注。
理想情况下,解决方案不包括我必须在每个段落前写的命令。
更新 1
问题/答案编号段落非常接近:
\documentclass{article}
\usepackage[excludeor]{everyhook}
\usepackage{lipsum}
\usepackage{parskip} % I added this, Manuel Kuehner
\newcounter{paragraphs}[section]
\begin{document}
\PushPostHook{par}{%
\stepcounter{paragraphs}%
\llap{\thesection.\theparagraphs\ \kern\parindent}%
}
\section{Foo}
\lipsum
\section{Bar}
\lipsum
\end{document}
它创建如下输出:
所以输出并不正确。
问题在于这里每个部分等等也都会得到额外的编号。
更新 2
这是另一个接近的解决方案(德语):http://texwelt.de/wissen/fragen/5020
但存在同样的问题,我需要对每个数字使用一个命令。
更新 3 [2020-11-07,即 5 年后]
- 在使用/尝试了大约 1.5 年后,我停止使用它了。
- 事后看来,这些评论(例如@egreg)是正确的,并且它产生了太多不良的副作用。
- 很抱歉我没有更好的更新。
- 我最终将
\subsubparagraph
它用在了每个段落中,并且与其余标题的格式有所不同。
答案1
使用该包的一种方法linguex
:
\documentclass{article}
\usepackage{lipsum} % for dummy text
\usepackage{linguex}
% Counter format
\renewcommand{\ExLBr}{\bfseries}
\renewcommand{\ExRBr}{}
% http://tex.stackexchange.com/a/57279/11604
% Reset \ex. at each section
\usepackage{chngcntr}
\counterwithin{ExNo}{section}
% add section counter
\renewcommand{\Exarabic}{\thesection.\arabic}
\begin{document}
\section{First section}
\ex. \lipsum[2]\par
\ex. \lipsum[3]\par
\section{Second section}
\ex. \lipsum[3]\par
\end{document}
编辑:如果您不想使用任何命令启动段落,请\everypar
自行承担风险...您会在评论中收到警告。
\NumPar
在下一个 MWE 中,每个部分开头的宏都会产生与上面相同的输出。作为使用问题的示例\everypar
,请注意,新部分会取消编号,但不会恢复 1em 的默认缩进,因此您必须手动恢复它。
\documentclass{article}
\usepackage{lipsum}
\parindent1em
\begin{document}
\def\NumPar{%
\parskip0.5em%
\parindent0em%
\everypar={%
\hangindent3em%
\addtocounter{subsection}{1}%
\makebox[3em][l]{\bfseries\thesubsection}%
}}%
\section{First section}
\NumPar
\lipsum[2]\par
\lipsum[3]\par
\everypar{}
\lipsum[3]\par
\section{Second section}
\NumPar % Or \parindent1em to return to normal paragraphs
\lipsum[3]\par
\lipsum[3]\par
\end{document}
答案2
另一个解决方案是非自动,但一个方便的解决方案是使用enumitem
包。只item
对块中的每个段落进行格式化description
:
\documentclass{article}
\usepackage{lipsum} % for dummy text
\usepackage{enumitem}
\begin{document}
\section{First section}
\begin{description}[style=unboxed,leftmargin=0.7cm]
\item[$\textbf{1.1}$]\lipsum[1]\par
\item[$\textbf{1.2}$]\lipsum[2]\par
\end{description}
\section{Second section}
\begin{description}[style=unboxed,leftmargin=0.7cm]
\item[$\textbf{2.1}$]\lipsum[3]\par
\end{description}
\end{document}