microtype、csquotes 活动引号和 itemize 交互

microtype、csquotes 活动引号和 itemize 交互

今天我遇到了自动引用和环境之间microtype的不良交互,本质上导致了“ ”错误。csquotesitemizeforgotten \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

编辑:此问题已在microtype3.0a 版本中修复。


从 3.0 版开始,应用了一些补丁来改善“内边距”的突出,例如在smicrotype的开头(参见文档的第 9 章)。这需要一些技巧,这里主动字符 from会干扰。一个快速修复方法是阻止使用 进行修补,无论是针对整个文档还是仅针对有问题的情况。一个更好的修复(将包含在下一个版本中)是修补相关命令:\itemmicrotypecsquotes\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(当然,在真实文档中,您会将补丁移至序言部分。)

输出

相关内容