使用 titlesec 的 runin 样式和 microtype 增加水平空间

使用 titlesec 的 runin 样式和 microtype 增加水平空间

请考虑以下示例:

\documentclass{article}

\usepackage{titlesec}
\usepackage{parskip}
\usepackage{microtype}

\titleformat{\section}[runin]{}{}{0pt}{}
\titlespacing{\section}{0pt}{\baselineskip}{0pt}

\begin{document}

\section{}
Text

Text
\end{document}

在此处输入图片描述

从上图可以看出,第一行在文本前有一些额外的水平空间(在这个例子中几乎不明显,但肯定存在)。

很难举出一个真实的例子,但这种现象在某些情况下可能很严重。下面是我正在写的课程笔记的截图,这让我发现了这个问题(第一个字母“C”实际上应该在行首):

在此处输入图片描述

在实际文档中,我已将章节编号放入边距,但上述 MWE 的空设置足以产生此问题。

如果我删除microtype,问题似乎就消失了。但它microtype确实很有用,使用此包后文档整体看起来好多了。

为什么会发生这种情况?有没有什么方法可以解决此问题?

答案1

原因是(我认为)在打印章节标题时titlesec会添加一个。(阅读以了解详情。)\struttitlesec.sty

如果你编译下面的代码

\documentclass{article}
\usepackage{titlesec}
\usepackage{parskip}
\usepackage{microtype}

\titleformat{\section}[runin]{}{}{0pt}{}
\titlespacing{\section}{0pt}{\baselineskip}{0pt}

\begin{document}

\section{Text}~

\vspace{-1.7em}
Text


\section{}Text

\vspace{-1.7em}
Text

\strut Text

\vspace{-1.7em}
Text
\end{document}

您会看到水平偏移量是相同的。

在此处输入图片描述

为了解决这个问题,nostruts选项 似乎titlesec很重要(可能会破坏其他东西?我不知道。)不幸的是,它只适用于lualatex?这是lua带有nostruts选项的版本

在此处输入图片描述

您会发现前两种情况下对齐效果良好,而\struted 版本仍显示偏移。但它不适用于pdflatex。所以此时我放弃了。

答案2

或多或少是一种黑客行为,但你可以通过可选参数添加负空间来解决\titleformat

    \documentclass{article}

    \usepackage{titlesec}
    \usepackage{parskip}
    \usepackage{microtype}
    \usepackage{showframe}
    \renewcommand{\ShowFrameLinethickness}{0.4pt}

    \titleformat{\section}[runin]{}{}{0pt}{}[\hspace*{-0.4pt}]
    \titlespacing{\section}{0pt}{\baselineskip}{0pt}

    \begin{document}

    \section{}Text

    Text

    \end{document} 

在此处输入图片描述

相关内容