![Microtype 和 quote 环境导致首行缩进不同](https://linux22.com/image/235516/Microtype%20%E5%92%8C%20quote%20%E7%8E%AF%E5%A2%83%E5%AF%BC%E8%87%B4%E9%A6%96%E8%A1%8C%E7%BC%A9%E8%BF%9B%E4%B8%8D%E5%90%8C.png)
当microtype
加载包时quote
,以标点符号开头的环境会“缩进”不一致。以下最小示例中的第一行不受影响,即与没有包时位于同一位置,但接下来的两行被推到了左边。我意识到这是一个特征包中的microtype
将标点符号推入页边距的功能,但这里看起来相当丑陋,因为它不一致。第一行很可能因为包含\item
在 中而有所不同\begin{quote}
。
有没有办法让缩进保持一致?我可以暂时禁用此功能,microtype
仅针对此环境吗?我在一些软件包手册中遇到了这样的代码,其中一些逐字代码行以“标点符号”开头,就像{
在quote
环境中一样。
\documentclass{article}
\usepackage{microtype}
\begin{document}
text text text text text text text text text text text text text text text text
\begin{quote}
()\\
()\\
()
\end{quote}
text text text text text text text text text text text text text text text text
\end{document}
答案1
microtype 作者建议的解决方案是这样的:
\documentclass{article}
\usepackage{microtype}
\makeatletter
\newcommand*\protrudeleft[1]{%
{\everypar{}%
\setbox\z@\vbox{\noindent#1}%
\vbadness=\@M
\splittopskip=\z@
\global\setbox\z@=\vsplit\z@ to \baselineskip
\unvbox\z@ \global\setbox\z@=\lastbox
}%
\ifhbox\z@
\leavevmode
\kern\leftmarginkern\z@
\fi
#1}
\makeatother
\begin{document}
text text text text text text text text text text text text text text text
text
\begin{quote}
\protrudeleft()\\
()\\
()
\end{quote}
text text text text text text text text text text text text text text text
text
\end{document}
注意:如果 \protrudeleft 参数不是像这里一样的简单字符,你可能需要将其放在括号中。
答案2
主要的microtype
可以使用命令动态启用或禁用功能\microtypesetup
。在这种情况下,我们需要本地禁用字符突出:
\documentclass{article}
\usepackage{microtype}
\newenvironment{example}{\microtypesetup{protrusion=false}%
\begin{quote}}{\end{quote}}
\begin{document}
text text text text text text text text text text text text text text text text
\begin{example}
()\\
()\\
()
\end{example}
text text text text text text text text text text text text text text text text
\end{document}
这当然会对所有的字符产生影响,无论是它()
还是其他符号。一个有趣的任务是选择性地如果要对除 之外的符号保持启用状态,请禁用此功能()
。
答案3
我会定义自己的microtype
安全环境,使其始终在任何地方都有突出部分。根据3em
您的需要进行调整:
\documentclass{article}
\usepackage{microtype}
\newenvironment{mtsafequote}
{\par\bgroup\leftskip=3em\rightskip=3em\noindent\ignorespaces}
{\par\egroup\noindent}
\begin{document}
text text text text text text text text text text text text text text text text
\begin{mtsafequote}
()\\
()\\
()
\end{mtsafequote}
text text text text text text text text text text text text text text text text
\end{document}
答案4
马丁,这就是需要的核心。我认为你比我更有资格将其包装到一个非常强大的重新定义的quote
环境中(或者可能在list
,\item
级别修复它):
\begin{quote}
\quitvmode\kern\dimexpr-0.001em*\the\lpcode\font`(\relax()\\
()\\
()
\end{quote}