LaTeX2e 2019/10/01 更新更改 \lbrace 与 \lcbrace 测试结果

LaTeX2e 2019/10/01 更新更改 \lbrace 与 \lcbrace 测试结果

在 LaTeX2e 2019/10/01 更新之前,以下测试mtpro2给出

% Intended output:
True
False
True

现在它给了

% After LaTeX2e 2019/10/01 update:
False
False
False

代码:

\documentclass{article}
\usepackage[lite]{mtpro2}
\begin{document}
% Default is curly braces, test result changed from True to False
\ifx\lbrace\lcbrace
  True%
\else
  False%
\fi

% Switch to straight braces, test result remains False
\straightbraces
\ifx\lbrace\lcbrace
  True%
\else
  False%
\fi

% Switch back to curly braces, test result changed from True to False
\curlybraces
\ifx\lbrace\lcbrace
  True%
\else
  False%
\fi
\end{document}

这似乎是由新内核“健壮”\lbrace和所有其他数学分隔符引起的:

  1. mtpro2首先\let\lcbrace=\lbrace。这使得\lcbrace指向的增强版本\lbrace
  2. mtpro2\curlybraces然后执行、\straightbraces和之一\morphedbraces。这会导致\def\lbrace{\delimiter<whatever> },从而变得\lbrace不稳健。

我想保留原始测试结果。评论中 Ulrike Fischer 的解决方案似乎有点过头了:因为mtpro2已经变得\lbrace不可靠,所以可以直接发出\def\lcbrace{\delimiter"4266308 }而不是加载另一个包。

我的问题是:取消强化会有什么坏处吗?或者,有更好的测试吗?(目标是在数学模式下确定当前的括号形状:卷曲与非卷曲。)

答案1

在旧内核上运行时也可以进行的新测试:

\documentclass{article}
\usepackage[lite]{mtpro2}

\makeatletter
\expandafter\ifx\csname lbrace \endcsname\relax
%   Before the ltfssdcl.dtx 2019/08/27 v3.0s update, \lcbrace
% pointed to a non-robust \lbrace (\delimiter"4266308 ). So a
% straightforward comparison test is possible.
\newcommand*\ifcurlybraces{%
  \ifx\lcbrace\lbrace
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\else
%   Since ltfssdcl.dtx 2019/08/27 v3.0s, the LaTeX2e kernel
% makes math delimiters robust (including \lbrace, \rbrace).
% But mtpro2 uses the non-robust definitions. So we need to
% use a different test.
\newcommand*\ifcurlybraces{%
  \expandafter\ifx\csname lbrace \endcsname\lbrace
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\fi
\makeatother

\begin{document}

$\{\bigl\{\Bigl\{\biggl\{\Biggl\{$
\ifcurlybraces{True}{False}

\straightbraces
$\{\bigl\{\Bigl\{\biggl\{\Biggl\{$
\ifcurlybraces{True}{False}

\morphedbraces
$\{\bigl\{\Bigl\{\biggl\{\Biggl\{$
\ifcurlybraces{True}{False}

\curlybraces
$\{\bigl\{\Bigl\{\biggl\{\Biggl\{$
\ifcurlybraces{True}{False}

\end{document}

新测试

相关内容