![零 \parskip 和不寻常的 \paragraph 导致段落重叠](https://linux22.com/image/259588/%E9%9B%B6%20%5Cparskip%20%E5%92%8C%E4%B8%8D%E5%AF%BB%E5%B8%B8%E7%9A%84%20%5Cparagraph%20%E5%AF%BC%E8%87%B4%E6%AE%B5%E8%90%BD%E9%87%8D%E5%8F%A0.png)
我正在尝试调试某个期刊提供的课程。有时,文本会完全乱码,或者根本不显示(我相信它是打印的某处但可能超出了页面范围)。此类是 的完整(且无用的)重新实现article
,但我认为我缩小了问题范围。
请考虑以下文档:
\documentclass[a4paper,10pt,twoside]{article}
\usepackage{lipsum}
\makeatletter
\renewcommand\paragraph{\@startsection{paragraph}
{4}{\z@}{12pt \@plus -3pt}{-.5em}
{\normalfont\normalsize\bfseries}}
\parskip\z@
\makeatother
\begin{document}
\lipsum[1-3]
\paragraph{New Par} \footnote{Oh}\lipsum[1-2]
\end{document}
虽然我认为该\paragraph
定义是无害的,但与 结合时\parskip\z@
,结果似乎会出错:
问题:我应该对编辑器进行什么修复?不要设置\parskip
为零?这真的是问题吗?问题出在 \paragraph 的定义上吗?
答案1
问题在于 的定义\paragraph
:第四个参数 ("beforeskip") 包含一个负plus
分量,而它不应该包含负分量。将其更改为 即可12pt \@plus 3pt
解决此问题。
负向拉伸(或收缩)几乎没有用处,除了某些情况。
通常情况下,我会就此打住——但因为我怀疑这种负面延伸是有原因的(而且因为你要求这样做……),所以可能值得深入研究一下其复杂性\@startsection
:
根据来源2e中,“beforeskip”参数用于指定以下内容:
绝对值 = 跳过标题上方的段落。如果为负数,则标题后面的文本的段落缩进将被抑制。
现在,如果latex
遇到负值(第一部分:例如-12pt
),它将 (1) 反转跳过的符号(这意味着反转此跳过的所有组件的符号:其自然宽度、拉伸和收缩),并且 (2) 将段落缩进开关设置为 false。因此,例如,-12pt \@plus -3pt \@minus -3pt
实际上意味着:beforeskip of12pt \@plus 3pt \@minus 3pt
和“下一个段落没有缩进”。由于负拉伸或收缩组件通常没有多大意义(见上文),全部成分应该是正的或者负的,但不能混合。
第五个参数(“afterskip”)指定:
如果为正,则跳至下方标题,否则为负,跳至进入标题的右侧。
在 的定义中\paragraph
,第五个参数为负数,表示它应该是插入标题,而不是开始新段落。因此,“beforeskip”是正数还是负数实际上并不重要,因为插入标题后面的文本当然不会缩进。