如何扩展命令以将其本身用作参数

如何扩展命令以将其本身用作参数

我尝试让这个宏工作了几天。我把问题简化为:

\documentclass[10pt,a4paper]{article}
\usepackage{xintgcd,xintfrac} % Simplify Script

\begin{document}

\newcommand*\simpFrac[2]
  {\begingroup
     \edef\gcd{\xintGCD{#1}{#2}}%
     \ifnum \xintNum{\xintDiv{#2}{\gcd}}=1
     \xintNum{\xintDiv{#1}{\gcd}}
     \else
     \frac{\xintNum{\xintDiv{#1}{\gcd}}}{\xintNum{\xintDiv{#2}{\gcd}}}%
     \fi
   \endgroup}

   \def\surgefif{\edef\simpFrac{4}{2}} 
   $\simpFrac{10}{ \surgefif }$

\end{document}

simpFrac命令主要是“复制和粘贴”,但我添加了在分母为

我尝试使用\edef,弄乱了\expandafter,但什么也做不了,所以我放弃了。

预期行为:

  • 简化 4/2 -> 2
  • 简化 10/2 -> 5

答案1

使用 lualatex 的解决方案:

\documentclass[10pt,a4paper]{article}
\newcommand*\simpFrac[2]{%
  \directlua{
    if (#1/#2 - math.floor(#1/#2)) == 0 
      then tex.sprint(math.floor(#1/#2)) 
      else tex.sprint("#1/#2") 
    end}
}

\begin{document}

\simpFrac{10}{3}

\def\surgefif{\simpFrac{4}{2}} 
   
\simpFrac{10}{\surgefif}

\simpFrac{10}{\simpFrac{4}{2}}

\end{document}

在此处输入图片描述

相关内容