请考虑以下示例:
\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
会添加一个。(阅读以了解详情。)\strut
titlesec.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
选项的版本
您会发现前两种情况下对齐效果良好,而\strut
ed 版本仍显示偏移。但它不适用于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}