,,$$'s 中的 \halign 不正确,并且带有 lmodern/microtype/fontspec

,,$$'s 中的 \halign 不正确,并且带有 lmodern/microtype/fontspec

这不是一个实际问题,而是一个“为什么会发生这种情况”的问题。在处理较大的文档时,我开始从 和环境中收到虚假且(对我来说)无法解释的Improper \halign inside $$'s.错误。amsmathalignalign*

切换到 MWE,我很快发现我加载了 和fontspeclmodern后者可能是在我切换到 Libertinus 字体之前留下的。不加载lmodern就解决了问题,但我仍然好奇为什么这发生过。

这是一个 MWE(我正在使用 XeTeX,以防万一):

%!TEX TS-program = xelatex
\documentclass{article}
\usepackage{amsmath}
\usepackage{lmodern}           % (1)
\usepackage{fontspec}          % (2)
\usepackage{microtype}         % (3)
\setmainfont{Libertinus Serif} % (4)
\begin{document}
    \begin{align}
        a & b
    \end{align}
\end{document}

注释掉任何标记为 (1)--(4) 的行使问题消失(当然,如果你注释掉 (2),你也必须注释掉 (4))。

我对幕后发生的事情感到很困惑。有人能解释一下吗?

答案1

编辑:这个问题已在microtypev3.0 中修复。


这是一个错误microtype

下列语句中,应该使用and而不是{and :}\begingroup\endgroup

\def\MT@set@inh@list#1#2{%
  \MT@ifempty\MT@inh@feat{%
    \MT@map@clist@c\MT@features{\begingroup % <--
      \MT@ifstreq{##1}{tr}\relax{\MT@declare@char@inh{##1}{#1}{#2}}%
    \endgroup}% <--
  }{%
    \MT@map@clist@c\MT@inh@feat{\begingroup % <--
      \KV@@sp@def\@tempa{##1}%
      \MT@ifempty\@tempa\relax{%
        \edef\@tempa{\csname MT@rbba@\@tempa\endcsname}%
        \MT@ifstreq\@tempa{tr}\relax{%
          \MT@exp@one@n\MT@declare@char@inh{\@tempa}{#1}{#2}}}%
    \endgroup}% <--
  }%      
  \MT@end@catcodes
}        

这解释了@David 发现的四个空数学原子。我将在下一个版本中对此进行更改,但现在将上述内容添加到序言中应该可以解决问题。

(顺便说一句:感谢完美的 MWE!)

答案2

如果这是第一个数学表达式,则只会出现错误。一些初始设置是在微妙的时刻发生的。您可以在丢弃的框中使用简单的数学表达式。

\documentclass{article}
\usepackage{amsmath}
\usepackage{lmodern}           % (1)
\usepackage{fontspec}          % (2)
\usepackage{microtype}         % (3)
\setmainfont{Libertinus Serif} % (4)
\begin{document}
\sbox0{$x$}
    \begin{align}
        a & b
    \end{align}
\end{document}

相关内容