现在我需要重新定义分数如下
通过写入\fr{2,3}
,我们得到$\frac{2}{3}$
。我该如何实现这一点?我试过
\newcommand{\fr}[1,2]{\frac{#1}{#2}}
但错了。
答案1
下面的示例\fr
用一个参数定义并通过帮助宏分隔分子和分母\fr@aux
:
\documentclass{article}
\makeatletter
\newcommand*{\fr}[1]{%
\fr@aux#1,,\@nil
}
\def\fr@aux#1,#2,#3\@nil{%
\ensuremath{\frac{#1}{#2}}%
}
\makeatother
\begin{document}
\[ \fr{2,3} = \fr{20,30} \]
\end{document}
带有错误检查的变体:
\documentclass{article}
\makeatletter
\newcommand*{\fr}[1]{%
\fr@aux#1,,\@nil
}
\def\fr@aux#1,#2,#3\@nil{%
\def\fr@param{#2#3}%
\ifx\fr@param\@empty
\errmessage{\string\fr: Missing comma}%
\else
\def\fr@param{#3}%
\ifx\fr@param\fr@check
\else
\errmessage{\string\fr: Too many commas}%
\fi
\fi
\ensuremath{\frac{#1}{#2}}%
}
\def\fr@check{,}
\makeatother
\begin{document}
\[ \fr{2,3} = \fr{20,30} \]
% Trigger errors:
\fr{1}
\fr{2,3,4}
\end{document}
答案2
这很容易xparse
:
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\fr}{>{\SplitArgument{1}{,}}m}{\efrac#1}
\NewDocumentCommand{\efrac}{mm}{\ensuremath{\frac{#1}{#2}}}
\begin{document}
Here's \fr{2,3} and also in math $\fr{4,2}=2$.
\end{document}
用 声明的参数\SplitArgument
应包含一个逗号。宏将参数拆分为两个括号部分,并将其作为参数传递\efrac
,而该参数又包含两个参数。
不过,能够打字并不\fr{2,3}
比使用更清晰的更方便$\frac{2}{3}$
。相信我。