我正在尝试创建一个 LaTeX 文档,该文档将自动对段落进行编号而无需使用\paragraph
- 这样做的原因是我正在处理由不使用 LaTeX 的其他人编写的文本。
编辑:这就是为什么解决方案段落编号无法解决我的特定问题,因为它要求\paragraph
将 替换为\item
。据我所知,这给了我同样的问题。
我搜索了几种解决方案,这些解决方案帮助我取得了进展,同时也警告说使用\everypar
可能会有问题……目前的情况是我几乎有解决方案,但新的\section
或\subsection
导致后续段落的编号丢失,如附图所示。其他段落的编号正确。
对于我来说,其他的编号解决方案也是可以接受的——我对于段落编号是否连续流经所有章节或遵循章节内的模式并没有真正的偏好。
我的最小工作示例如下(请注意,我需要使用该\titlesec
包使文档看起来漂亮)。我真的对这个很困惑 - 任何帮助或指示都将不胜感激!
\documentclass[11pt]{article}
\usepackage{lipsum}
\usepackage{titlesec}
\setcounter{secnumdepth}{3}
\newcounter{para}
\newcommand*{\numberedparagraph}{%
\refstepcounter{para}
\textbf{\thepara.\space}
}
\let\oldep\everypar\newtoks\everypar
\oldep{\the\everypar\everypar{\numberedparagraph}}
\begin{document}
\everypar{\numberedparagraph}
\section{Section 1}
\lipsum[1-2]
\section{Section 2}
\lipsum[4-5]
\subsection{A Subsection}
\lipsum[6-7]
\end{document}
答案1
感谢@NicolaTalbot 为我指明正确的方向。
解决方案是重新定义\@afterheading
。但这并不完全正确,因为段落编号的缩进有点不对,所以我通过将段落缩进设置为 0 来解决这个问题。
更正后的代码和图像如下:
\documentclass[11pt]{article}
\usepackage{lipsum}
\usepackage{titlesec}
\setcounter{secnumdepth}{3}
\setlength{\parindent}{0em} % indent subsequent paragraphs
\newcounter{para}
\newcommand*{\numberedparagraph}{%
\refstepcounter{para}
\textbf{\thepara.\space}
}
\let\oldep\everypar\newtoks\everypar
\oldep{\the\everypar\everypar{\numberedparagraph}}
\makeatletter %
\renewcommand{\@afterheading}{%
\@nobreaktrue
\everypar{%
\if@nobreak
\@nobreakfalse
\clubpenalty\@M
\if@afterindent
\else
{\setbox\z@\lastbox}%
\fi
\else
\clubpenalty\@clubpenalty
\everypar{\numberedparagraph}% <- modification
\fi
\numberedparagraph% <- modification
}%
}
\begin{document}
\everypar{\numberedparagraph}
\section{Section 1}
\lipsum[1-2]
\section{Section 2}
\lipsum[4-5]
\subsection{A Subsection}
\lipsum[6-7]
\end{document}