![titlesec - 使用默认点间距运行标题](https://linux22.com/image/430917/titlesec%20-%20%E4%BD%BF%E7%94%A8%E9%BB%98%E8%AE%A4%E7%82%B9%E9%97%B4%E8%B7%9D%E8%BF%90%E8%A1%8C%E6%A0%87%E9%A2%98.png)
我试图在默认的 末尾添加一个点\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@@\font
and such 本质上等同于\fontdimen3\font
and 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}