如何拉伸分数线的长度?

如何拉伸分数线的长度?

我想稍微拉伸一下每个分数条的长度。我知道我可以像这样定义一个新命令:

\newcommand\newfrac[2]{\frac{\,#1\,}{\,#2\,}}

但是,我想将较长的分数设置为默认值,这样我就可以继续书写$\frac{}{}$并得到我想要的结果。

我知道在附录 G 中有一些与此相关的命令电子书。但是,我很难弄清楚如何做。需要你的帮助。

附言:我在 XeLaTeX 中使用 12pt、书籍类和mtpro2数学字体。

答案1

假设你正在使用amsmath,其中定义

\DeclareRobustCommand{\frac}[2]{{\begingroup#1\endgroup\@@over#2}}

找到后,只需修改它;在你的序言中添加

\makeatletter
\DeclareRobustCommand{\frac}[2]{{\begingroup\,#1\,\endgroup\@@over\,#2\,}}
\makeatother

在数学模式下\,意味着\mskip\thinmuskip,因此它的值取决于当前数学符号字体​​中的四边形(并随之自动缩放)。

答案2

您可以使用\let复制原始命令,然后重新定义它:

\let \originalfrac=\frac
\renewcommand{\frac}[2]{\originalfrac{\,#1\,}{\,#2\,}}

编辑:更好的:

\let \originalfrac=\frac
\DeclareRobustCommand{\myfrac}[2]{\originalfrac{\,#1\,}{\,#2\,}} 
\let \frac=\myfrac

这与第一种方法有两点不同:

  • \let它定义了一个新命令,而不是更新现有命令。使用而不是替换命令\renewcommand。至于为什么这样做更好,请参见下面的示例。
  • 它使新命令更加强大。正如 Marco Daniel 指出的那样,如果在章节标题中使用此命令\newcommand,则简单的替换\DeclareRobustCommand会导致目录中出现双倍行距。

使用第一种方法,在处理不自己执行任务而是调用另一个命令为其执行任务的命令时,您会遇到麻烦,例如带有可选参数或带星号版本的命令。请考虑以下示例:

\documentclass{article}

\newcommand{\test}[1][world]{hello #1}
    \show\test
    \expandafter\show\csname\string\test\endcsname

\let \originaltest=\test
\renewcommand{\test}[1][world]{\originaltest[\emph{#1}]}
    \show\test
    \show\originaltest
    \expandafter\show\csname\string\test\endcsname

\begin{document}
\ifx \test \originaltest
    true
\else
    false
\fi
\end{document}

这里, 的定义\test没有改变,因为(撇开所有保护内容不谈)它只处理可选参数(在本例中相同)。然而,您打算复制的真正有趣的内容已保存在另一个名为 的命令中,并被\\test覆盖\renewcommand

如果您现在尝试扩展,\test则会陷入无限循环:\test会以某种方式扩展到哪个,\\test会扩展到哪个,\originaltest[\emph{#1}]会以某种方式\\test再次扩展到等等。

相关内容