今天我遇到了自动引用和环境之间microtype
的不良交互,本质上导致了“ ”错误。csquotes
itemize
forgotten \endgroup
一位 MWE 表示:
\documentclass{article}
\usepackage{microtype}
\usepackage{csquotes}
\MakeAutoQuote{“}{”}
\begin{document}
\begin{itemize}
\item “foo”
\end{itemize}
\end{document}
这会导致错误:
./document.tex:11: Extra }, or forgotten \endgroup.
<recently read> }
l.11 \item “
foo”
./document.tex:12: Missing } inserted.
<inserted text>
}
l.12 \end{itemize}
仅当两个包都加载并且活动引号紧随其后时,我才能重现这种情况\item
(向其传递一个空的可选参数不会改变任何事情)。
我是不是漏掉了什么,还是这真的是包之间的不良交互?(我很确定这曾经有效,但我的记忆在类似情况下也失败了……)。如果确实如此,我想应该写一份报告。我很乐意这样做,但我不知道该向谁汇报。欢迎在这方面提出建议。还有一些临时解决办法。
答案1
编辑:此问题已在microtype
3.0a 版本中修复。
从 3.0 版开始,应用了一些补丁来改善“内边距”的突出,例如在smicrotype
的开头(参见文档的第 9 章)。这需要一些技巧,这里主动字符 from会干扰。一个快速修复方法是阻止使用 进行修补,无论是针对整个文档还是仅针对有问题的情况。一个更好的修复(将包含在下一个版本中)是修补相关命令:\item
microtype
csquotes
\microtypesetup{nopatch=item}
microtype
\documentclass{article}
\usepackage{microtype}
\usepackage{csquotes}
\MakeAutoQuote{“}{”}
\usepackage{etoolbox}
\begin{document}
\begin{itemize}
\microtypesetup{nopatch=item}
\item “foo” some more text\\ “another quote”
\end{itemize}
\makeatletter
\patchcmd\MT@get@prot{\noindent}{\noindent\@disablequotes}{}{}
\makeatother
\begin{itemize}
\item “foo” some more text\\ “another quote”
\end{itemize}
\end{document}
\MT@get@prot
(当然,在真实文档中,您会将补丁移至序言部分。)