TeXLive-2016 中的 microtype 和 exscale 崩溃

TeXLive-2016 中的 microtype 和 exscale 崩溃

我刚刚安装了 TeXLive-2016,发现 microtype(更准确地说是命令\textls和)exscale崩溃了,而在 TeXLive-2015 中它们运行正常。以下是示例:

\documentclass{article}
\usepackage{microtype}
\usepackage{exscale}
\begin{document}
\textls[160]{$abc$}
\end{document}

这种不兼容现象的背后原因是什么?

答案1

我不确定为什么在某种\textls语境中使用数学,但是……

microtype2.6a 版本 (TL 2016)之间存在差异

\DeclareRobustCommand\lsstyle{%
  \not@math@alphabet\lsstyle\textls
  \MT@glet\glb@currsize\@empty
  \def\MT@feat{tr}%
  \let\MT@tracking\MT@set@tr@codes
  \selectfont
}

和版本 2.5a (TL 2015)

\DeclareRobustCommand\lsstyle{%
  \not@math@alphabet\lsstyle\textls
  \let\glb@currsize\@empty
  \def\MT@feat{tr}%
  \let\MT@tracking\MT@set@tr@codes
  \selectfont
}

代码在microtype-pdftex.def和中microtype-luatex.def(没有\textls用 XeTeX 定义)。

资料中没有关于从\let到 的改变的评论\global\let,但这是应该做的(参见来源 2e)。然而exscale

\addto@hook\every@math@size{%
  \begingroup
     \setbox\z@\vbox{\hbox{$($}\kern\z@}%
     \global\big@size 1.2\ht\z@
  \endgroup}

我们可以看到问题:组内的数学公式触发设置数学大小,但值为\glb@currsize空,导致\every@math@size被调用……无限循环。

以下补丁可能会解决问题,因为在为测量目的而构建\textfont0时应该已经设置好了。\hbox

\documentclass{article}
\usepackage{microtype}
\usepackage{exscale}
\usepackage{etoolbox}

\makeatletter
\edef\next{\the\every@math@size}
\patchcmd\next{\hbox{$($}}{\hbox{\the\textfont\z@(}}{}{}
\every@math@size=\expandafter{\next}
\makeatother

\begin{document}

$(\big(\Big(\bigg(\Bigg($

{\Large$(\big(\Big(\bigg(\Bigg($}

\textls[160]{$abc$}
\end{document}

在此处输入图片描述

相关内容