titlesec - 使用默认点间距运行标题

titlesec - 使用默认点间距运行标题

我试图在默认的 末尾添加一个点\paragraph,但希望它的间距与通常的“点后间距”一致(并且不想只使用\frenchspacing)。该\wordsep命令titlesec不幸的是,提供仅添加普通空格,而不是“点后空格”。我尝试在命令的某些参数中添加常规空格\titleformat(例如,在点后,包括使用\titlesec'sexplicit选项),但它似乎被忽略/吞噬了。

\documentclass{article}
\usepackage{titlesec}
\titleformat{\paragraph}[runin]{\normalfont\normalsize\bfseries}{}{0pt}{}[.]
\titlespacing*{\paragraph}{0pt}{3.25ex plus 1ex minus .2ex}{\wordsep}
\begin{document}
    \paragraph{Paragraph} \vrule\\
    \textbf{Paragraph.} \vrule
\end{document}

输出(裁剪)

答案1

我一直在尝试进行一些逆向工程。

titlesec包定义\wordsep

\newcommand\wordsep{\fontdimen\tw@\font \@plus
  \fontdimen\thr@@\font \@minus \fontdimen4\font}

\fontdimen\thr@@\fontand such 本质上等同于\fontdimen3\fontand such (TeXBook p. 345),而后者本身在 TeXBook p. 433、TeX by Topic p. 31 以及TeX 如何知道如何分隔不同的字体?

现在,为了找出 TeX 如何具体改变点后的间距,TeXBook 第 351 页很有用,其中\nonfrenchspacing定义:

\def\nonfrenchspacing{\sfcode‘\.=3000 \sfcode‘\?=3000 \sfcode‘\!=3000
  \sfcode‘\:=2000 \sfcode‘\;=1500 \sfcode‘\,=1250 }

TeX by Topic p. 155 解释了特定字符的\sfcode设置。在这里设置为 3000 会产生三个后果(在句子结束句号后的粘合上):\spacefactor\spacefactor

  • 拉伸率乘以 3000/1000
  • 收缩率乘以 1000/3000
  • 由于 3000 大于或等于 2000,因此\fontdimen7\font添加了“额外空间”

因此,我期望以下方法能够达到目的:

\newcommand\postdotsep{\dimexpr\fontdimen\thr@@\font+\fontdimen7\font \@plus
  \dimexpr3\fontdimen\thr@@\font \@minus \dimexpr\fontdimen4\font/3}

事实确实如此!

\documentclass{article}
\usepackage{titlesec}
\makeatletter
\newcommand\postdotsep{\dimexpr\fontdimen\tw@\font+\fontdimen7\font\@plus
  \dimexpr3\fontdimen\thr@@\font \@minus \dimexpr\fontdimen4\font/3}

\titleformat{\paragraph}[runin]{\normalfont\normalsize\bfseries}{}{0pt}{}[.]
\titlespacing*{\paragraph}{0pt}{0pt}{\postdotsep}

\makeatother

\begin{document}
    \paragraph{Paragraph} \vrule\\
    \textbf{Paragraph.} \vrule
\end{document}

相关内容