为什么为了避免水平过满而拉伸列表项的这些方法会产生不同的结果,哪种方法是正确的?

为什么为了避免水平过满而拉伸列表项的这些方法会产生不同的结果,哪种方法是正确的?

考虑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 倍放大倍数查看:

\emergencystretch=1.02em 和 diffpdf 在 8x 处

正如我们所见,mwe2.pdf 中第一项中的“A”和第二项中的“T”都比 mwe1.pdf 中的更靠右(mwe2.pdf 中最左边的衬线比 mwe1.pdf 中的更明显)。虽然在这个特定的最小工作示例中,视觉差异很小,但它提出了一个问题,在一般情况下,避免列表项进入边距的两种方法中,哪一种是正确的™,即应该如何做?为什么?这些“A”和“T”应该从哪里开始?

此外,如果我们在两个输入文件中将更改为\myStretch,并在两个文件中的每一个上重新运行,则第一项将排版为1.02em.99empdflatex溢出 \hbox在 mwe1.pdf 中但不在 mwe2.pdf 中:

\emergencystretch=.99em 和 diffpdf 为 2x

为什么?

答案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}

在此处输入图片描述

相关内容