考虑mwe1.tex
包含
\documentclass{article}
\usepackage{microtype}
\newcommand{\myStretch}{1.02em}%%% try out .99em to see the difference in the first item.
\hyphenation{longlong}
\begin{document}%
\begin{enumerate}
\item A longlong longlong longlong longlong longlong longlong longlong longlong longlong longlong longlong multi-line item that needs a positive \texttt{\textbackslash emergencystretch}.\begingroup\setlength{\emergencystretch}{\myStretch}\par\endgroup
\item There are many \ldots
\end{enumerate}
\end{document}
以及一个非常相似的文件,mwe2.tex
包含
\documentclass{article}
\usepackage{microtype}
\newcommand{\myStretch}{1.02em}%%% try out .99em to see the difference in the first item.
\hyphenation{longlong}
\begin{document}%
\begin{enumerate}
\item\setlength{\emergencystretch}{\myStretch}A longlong longlong longlong longlong longlong longlong longlong longlong longlong longlong longlong multi-line item that needs a positive \texttt{\textbackslash emergencystretch}.%
\item\setlength{\emergencystretch}{0sp}There are many \ldots
\end{enumerate}
\end{document}
裸文本是相同的;唯一的区别是格式化命令,以避免第一项运行到右边距。
在每个文件上运行pdflatex
并通过视觉比较结果diffpdf
得出差异,这里以 8 倍放大倍数查看:
正如我们所见,mwe2.pdf 中第一项中的“A”和第二项中的“T”都比 mwe1.pdf 中的更靠右(mwe2.pdf 中最左边的衬线比 mwe1.pdf 中的更明显)。虽然在这个特定的最小工作示例中,视觉差异很小,但它提出了一个问题,在一般情况下,避免列表项进入边距的两种方法中,哪一种是正确的™,即应该如何做?为什么?这些“A”和“T”应该从哪里开始?
此外,如果我们在两个输入文件中将更改为\myStretch
,并在两个文件中的每一个上重新运行,则第一项将排版为1.02em
.99em
pdflatex
溢出 \hbox在 mwe1.pdf 中但不在 mwe2.pdf 中:
为什么?
答案1
microtype 修补 item 命令以启用那里的突出部分,此修补程序必须向前看。如果您将命令直接放在后面,\item
则会中断修补程序。
在下面的例子中,我使用了引号,因为这会使效果更加明显,但使用 A 也会发现细微的差别。
\documentclass{article}
\usepackage{microtype,tikz}
\newcommand{\myStretch}{1.02em}%%% try out .99em to see the difference in the first item.
\hyphenation{longlong}
\begin{document}%
\begin{enumerate} %patch missing
\item\setlength{\emergencystretch}{\myStretch}``A
\end{enumerate}
\begin{enumerate} %patch working
\item ``A\setlength{\emergencystretch}{\myStretch}
\end{enumerate}
\microtypesetup{nopatch=all} %disable patch
\begin{enumerate}
\item ``A
\end{enumerate}
\begin{enumerate}
\item \tikz[overlay]{\draw[red](0,0)--++(0,10cm)}
\end{enumerate}
\end{document}