我尝试在每个段落后添加一个 \P(¶ 符号)。因此,我选择了
\everypar={\P}
命令。首先,我发现 LaTeX 在之后重新定义了它
\begin{document}
因此,我将代码放在了文档环境中。
但是,我没有得到想要的效果。请找到最少的代码:
\documentclass{article}
\begin{document}
\everypar={\P}
\section{Intro} some text \par next paragraph \par\noindent even more
\section{Outro} the end of my document
\end{document}
我的输出在部分编号之前显示 \P,这让我完全困惑。
我使用 MikTeX 2.9.4813 (x64) 和 TeXnicCenter 来构建我的文档。
答案1
LaTeX\everypar
在各处使用它自身,管理节标题后的缩进(或不缩进),保存缩进列表结构的段落形状,它还在小页面、parbox 和表格p
列中重置,因此设置\everypar
很棘手。
除了该值可以随时被覆盖之外,部分标题(如大多数文本)内部是一个段落,因此正如\everypar
您所观察到的触发。
您可以(小心)这样做,以避免您的定义在第一个标题后丢失,但它需要进行本地测试插入,以避免添加\P
前节标题
\documentclass{article}
\begin{document}
\let\oldep\everypar \newtoks\everypar \oldep{\the\everypar\P}
\section{Intro} some text \par next paragraph \par\noindent even more
\section{Outro} the end of my document
\end{document}
因此,这里有一个版本,其中定义了标题代码以删除标记:
\documentclass{article}
\begin{document}
\let\oldep\everypar \newtoks\everypar \oldep{\the\everypar\hbox{\P}}
\makeatletter
\def\@sect#1#2#3#4#5#6[#7]#8{%
\ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\else
\refstepcounter{#1}%
\protected@edef\@svsec{\@seccntformat{#1}\relax}%
\fi
\@tempskipa #5\relax
\ifdim \@tempskipa>\z@
\begingroup
#6{%
\@hangfrom{\hskip #3\relax\@svsec}%
\interlinepenalty \@M
% remove indentation box, remove \P box put indentation box back
\leavevmode \setbox\z@\lastbox\setbox\tw@\lastbox\box\z@
#8\@@par}%
\endgroup
\csname #1mark\endcsname{#7}%
\addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}%
\else
\def\@svsechd{%
#6{\hskip #3\relax
\@svsec #8}%
\csname #1mark\endcsname{#7}%
\addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}}%
\fi
\@xsect{#5}}
\makeatother
\section{Intro} some text \par next paragraph \par\noindent even more
\section{Outro} the end of my document
\end{document}
答案2
除了其他答案和评论中提到的内容外,\everypar
还使用在每个段落的开头(或者更准确地说,当 TeX 从垂直模式变为水平模式时),因此它对于您尝试实现的目的是无用的。
为此,最好重新定义\par
,如下所示:
\documentclass{article}
\begin{document}
\let\oldpar=\par
\def\par{\P\oldpar}
\section{Intro} some text \par next paragraph \par\noindent even more
\section{Outro} the end of my document
\end{document}
但即使这样也会产生不想要的结果,因为节标题在内部也\par
以意想不到的方式使用。查看结果: