我想稍微拉伸一下每个分数条的长度。我知道我可以像这样定义一个新命令:
\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
再次扩展到等等。