微类型对齐错误:“(3D)”太靠左;在枚举内。这是设计使然吗?

微类型对齐错误:“(3D)”太靠左;在枚举内。这是设计使然吗?

包裹microtype旨在对 LaTeX 文档的最终外观进行细微改进。根据回答我应该用 pdflatex 加载 microtype 吗?和一个评论在答案下面,应该(几乎)总是加载微类型,并通过

\makeatletter\usepackage{microtype}\g@addto@macro\@verbatim{\microtypesetup{activate=false}}\makeatother%

还:enumitem


没有microtype,以下是输出。请注意“(2D)”和“(3D)”如何完美对齐:

无需微缩型即可实现 (2D) 和 (3D) 对齐

microtype,输出被改变。请注意,“(2D)”和“(3D)”不是对齐。“(3D)”部分太靠左了:

(2D)和(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}

我正在运行pdflatex3.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}

输出为

在此处输入图片描述

相关内容