如何根据其模式(显示或内联)定义数学命令?

如何根据其模式(显示或内联)定义数学命令?

我想定义一个数学命令,它在显示模式和内联模式下的行为不同。例如,我想定义一个\myfrac#1#2,它等于$\frac{#1}{#2}$,但在内联模式下等于$#1/#2$。MWE 如下所示:

\documentclass{article}
\makeatletter
\newcommand\myfrac#1#2{
  \ifdisplay \frac{#1}{#2}
  \else #1/#2
  \fi
}
\makeatother
\begin{document}
\[ \myfrac12 = \frac12 \]

$\myfrac12=1/2$.
\end{document} 

但我不知道如何判断数学模式。谢谢你的建议!

答案1

由于 TeX 的一个不良设计选择,我们无法直接确定当前的数学样式(因为以后\over可能会改变它),但是\mathchoice原语允许您以所有四种样式(显示、文本、脚本和 scriptscript)设置文本,并在 tex 汇编最终数学列表时选择适当的样式。

内联 1/2 可能会受益于一些字距调整和调整,但是...

在此处输入图片描述

\documentclass{article}

\newcommand\zzfrac[2]{\mathchoice
  {\frac{#1}{#2}}%
  {#1/#2}%
  {#1/#2}%
  {#1/#2}%
}
\begin{document}


\[
\zzfrac{1}{2}
+
\frac{\zzfrac{1}{2}}{\zzfrac{1}{2}}
+
x^{\zzfrac{1}{2}}
\]

\end{document}

答案2

虽然 David 的回答是规范方法,但该scalerel包允许通过不同的语法做同样的事情。\ThisStyle{}调用本质上是将参数放在 a 中\mathchoice,并使当前的数学样式可供您使用,通常是通过调用到\SavedStyle(如果您在样式丢失的地方,例如在 内部,这很有用\hbox)。但是,在您的情况下,您不需要调用当前的数学样式,您只需要知道它是什么,以便决定采取什么路径。在 中\ThisStyle,命令\m@switch包含DTS或 ,s代表四种(显示、文本、脚本和 scriptscript)数学样式。所以在这里,我检查它是否是D并做出相应的决定。

\documentclass{article}
\usepackage{scalerel}
\makeatletter
\newcommand\zzfrac[2]{\ThisStyle{\if D\m@switch
  \frac{#1}{#2}\else#1/#2\fi}}
\makeatother
\begin{document}
\[
\zzfrac{1}{2}
+
\frac{\zzfrac{1}{2}}{\zzfrac{1}{2}}
+
x^{\zzfrac{1}{2}}
\]
\end{document}

在此处输入图片描述

答案3

我认为您的\myfrac只有在内联数学模式下才需要不同,即在 之间$...$。另一方面,您希望在显示样式中保留经典分数,即在 之间$$...$$

可以通过设置\everymath\everydisplay寄存器来完成:

\documentclass{article}
\usepackage{amsmath}

\setbox0=\hbox{$$}
\everymath{\let\myfrac=\fracreduced}
\everydisplay{\everymath{}}
\let\myfrac=\frac
\def\fracreduced#1#2{#1/#2}

\begin{document}

Onehalf in text: $\myfrac12$.  % prints: 1/2

\begin{align}
x&=\myfrac12 \\                % prints: {1\over2}
y&=\myfrac34                   % prints: {3\over4}
\end{align}

\end{document}

答案4

我发现使用包有一个简单的答案amsmath

\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand\myfrac[2]{
  \if@display \frac{#1}{#2}
  \else #1/#2 
  \fi
}
\makeatother
\begin{document}
\[
\myfrac12
\]

$\myfrac12$
\end{document} 

相关内容