我尝试让这个宏工作了几天。我把问题简化为:
\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}