在 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
和所有其他数学分隔符引起的:
mtpro2
首先\let\lcbrace=\lbrace
。这使得\lcbrace
指向的增强版本\lbrace
。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}