包裹
microtype
旨在对 LaTeX 文档的最终外观进行细微改进。根据回答到我应该用 pdflatex 加载 microtype 吗?和一个评论在答案下面,应该(几乎)总是加载微类型,并通过\makeatletter\usepackage{microtype}\g@addto@macro\@verbatim{\microtypesetup{activate=false}}\makeatother%
还:
enumitem
没有microtype,以下是输出。请注意“(2D)”和“(3D)”如何完美对齐:
和microtype,输出被改变。请注意,“(2D)”和“(3D)”不是对齐。“(3D)”部分太靠左了:
当然,这不是一个很大的影响,但仍然很烦人。我不认为这是微类型的预期效果,但我不确定……更重要的是:
问:我可以修复它吗并继续保持微型?
(修理它= “(2D)” 和 “(3D)” 再次对齐;当然,对于其他类似情况也应该自动和全局地完成)
MWE(要启用微类型,请取消注释代码中相应的行):
\documentclass{book}
\usepackage{enumitem}
%\makeatletter\usepackage{microtype}\g@addto@macro\@verbatim{\microtypesetup{activate=false}}\makeatother% %uncomment to see the left-shift
\begin{document}
\begin{enumerate}
\item (2D) Some test here.
(3D) This is too far to the left wrt to (2D) (!very slightly!) with microtype.
\item Some other text here.
\end{enumerate}
\end{document}
我正在运行
pdflatex
3.141592653-2.6-1.40.22 (MikTeX 21.3),并且我本地发行版中的每个软件包都于 2021 年 4 月 28 日更新。在默认设置下,Overleaf 上的输出是相同的(就错位而言)。
答案1
虽然一种方法是抑制所有地方的突出,但这种方法是强制在调用之后的左括号上突出\item
,我通过重新定义\item
来查看接下来的内容。
\documentclass{book}
\usepackage{enumitem}
%
\usepackage{microtype}
\makeatletter
\g@addto@macro\@verbatim{\microtypesetup{activate=false}}% %uncomment to see the left-shift
\let\svitem\item
\renewcommand\item[1][\relax]{%
\ifx\relax#1
\svitem
\else
\svitem[#1]
\fi
\@ifnextchar({\hspace{-1.2pt}}{}%
}
\makeatother
\begin{document}
\begin{enumerate}
\item (2D) Some test here.
(3D) This is too far to the left wrt to (2D) (!very slightly!) with microtype.
\item Some other text here.
\end{enumerate}
\end{document}
xpatch
这也可以通过宏等效地完成\apptocmd
:
\documentclass{book}
\usepackage{enumitem,xpatch}
%
\usepackage{microtype}
\makeatletter
\g@addto@macro\@verbatim{\microtypesetup{activate=false}}% %uncomment to see the left-shift
\apptocmd{\item}{\@ifnextchar({\hspace{-1.2pt}}{}}{}{}
\makeatother
\begin{document}
\begin{enumerate}
\item (2D) Some test here.
(3D) This is too far to the left wrt to (2D) (!very slightly!) with microtype.
\item Some other text here.
\end{enumerate}
\end{document}
答案2
请注意,这种情况仅当行以“(”开头而不是以“E”等字符开头时才会发生。这是突起(=边距字距调整)的副作用,即将“(”向左移动一点,以获得更和谐的边距,但在这种情况下似乎相反,因为突起在项目编号后不适用。
对于这种情况,偶尔会出现一种不太好的解决方案,比如\makebox[0pt]{}
在括号之前,因为的框0pt
不会向左突出(请注意,\makebox{}
如果没有指定宽度,则不会校正突出),或者使用局部禁用突出\microtypesetup{protrusion=false}
。
一般的修复方法是禁用任何枚举列表之前的突起:
\documentclass{book}
\usepackage{microtype}
\AtBeginEnvironment{enumerate}{\microtypesetup{protrusion=false}}
\begin{document}
\begin{enumerate} \item E\par E\end{enumerate}
\begin{enumerate} \item (E\par (E \end{enumerate}
\end{document}
答案3
如果一个不介意额外的垂直空间,也可以使用以下解决方案,\item[]
在 前面添加(3D)
。
\documentclass{book}
\usepackage{enumitem}
\makeatletter\usepackage{microtype}\g@addto@macro\@verbatim{\microtypesetup{activate=false}}\makeatother% %uncomment to see the left-shift
\begin{document}
\begin{enumerate}
\item (2D) Some test here.
\item[] (3D) This is too far to the left wrt to (2D) (!very slightly!) with microtype.
\item Some other text here.
\end{enumerate}
\end{document}
输出为