Mathtools 的下括号和 MinionPro

Mathtools 的下括号和 MinionPro

代码

\documentclass{article}
\usepackage{mathtools}
\usepackage{MinionPro}
\begin{document}
  \[
  \underbracket{123}_{x}
  \underbracket[1pt]{123}_{x}
  \]
\end{document}

生产

在此处输入图片描述

如果注释掉该行,则MinionPro一切恢复正常。有没有办法避免这种情况?

答案1

让我们看看\underbracket

\providecommand*\underbracket{
  \@ifnextchar[
    {\MT_underbracket_I:w}
    {\MT_underbracket_I:w[\l_MT_bracketheight_fdim]}}
\def\MT_underbracket_I:w[#1]{
  \@ifnextchar[
    {\MT_underbracket_II:w[#1]}
    {\MT_underbracket_II:w[#1][.7\fontdimen5\textfont2]}}
\def\MT_underbracket_II:w[#1][#2]#3{%
  \mathop{\vtop{\m@th\ialign{##
    \crcr
      $\hfil\displaystyle{#3}\hfil$%
    \crcr
      \noalign{\kern .2\fontdimen5\textfont2 \nointerlineskip}%
      \upbracketfill {#1}{#2}%
    \crcr}}}
  \limits}
\def\upbracketfill#1#2{%
  \sbox\z@{$\braceld$}
  \edef\l_MT_bracketheight_fdim{\the\ht\z@}%
  \upbracketend{#1}{#2}
  \leaders \vrule \@height \z@ \@depth #1 \hfill
  \upbracketend{#1}{#2}%
}
\def\upbracketend#1#2{\vrule \@height #2 \@width #1\relax}

我们看到该命令有两个可选参数;可选参数的默认值分别为\l_MT_bracketheight_fdim.7\fontdimen5\textfont2。因此,调用\underbracket{123}最终会执行

\upbracketfill{\l_MT_bracketheight_fdim}{.7\fontdimen5\textfont2}

并且这些参数在其他地方没有使用。宏\upbracketfill定义\l_MT_bracketheight_fdim为与的高度相同。这是用于终止连接到的操作$\braceld$的字符(可能应该使用,但它并没有真正改变问题)。\downbracefill\overbrace\bracelu

现在让我们做一个实验(MinionPro用于MnSymbol数学):

\documentclass{article}
\usepackage{mathtools}
\usepackage{MnSymbol}
\begin{document}

\fboxsep=0pt % tight bounding box

x\fbox{$\braceld$}

x\fbox{$\bracelu$}

\end{document}

在此处输入图片描述

如果我们省略加载,我们会得到什么MnSymbol

在此处输入图片描述

\braceld你看到问题了吗?有几个问题,但在这种情况下,主要问题是高度巨大的。使用 Computer Modern 数学字体, 的高度\braceld可用作\underbrace或 的填充规则的高度\overbrace;这对于 和 来说根本不可能MnSymbol,事实上,MnSymbol它会改变 的定义\underbrace以及\overbrace连接的宏。

您可以做的是将默认值更改为仍然与 MnSymbol 数学字体相关的值;在这里我使用了分数线粗细的两倍。

\documentclass{article}
\usepackage{mathtools}
\usepackage{MnSymbol}

\makeatletter
\MHInternalSyntaxOn
\def\upbracketfill#1#2{%
  \edef\l_MT_bracketheight_fdim{\the\dimexpr 2\fontdimen8\textfont3}%
  \upbracketend{#1}{#2}%
  \leaders \vrule \@height \z@ \@depth #1 \hfill
  \upbracketend{#1}{#2}%
}
\MHInternalSyntaxOff\showthe\catcode`@
\makeatother


\begin{document}

$\underbracket{123}_{x}$                           

\end{document}

在此处输入图片描述

答案2

除了最后一条评论之外,我确实在 LaTeX 中使用了 Minion Pro。MnSymbol这非常重要,但我还使用了MinionPro以下mathalfa选项:

\usepackage[mathlf,textlf,minionint,openg]{MinionPro} \usepackage[bb=lucida,bbscaled=1,cal=boondoxo]{mathalfa}

为了获得完整的数字我使用这个

\documentclass{article}
\usepackage{mathtools}
\usepackage[mathlf,textlf,minionint,openg]{MinionPro}
\usepackage[bb=lucida,bbscaled=1,cal=boondoxo]{mathalfa}
\usepackage{MnSymbol}

\begin{document}
  \[
  \underbracket{123}_{x}
  \underbracket[1pt]{123}_{x}
  \]
\end{document}

结果如下:

在此处输入图片描述

相关内容