此代码(使用长)产生
\documentclass{article}
\input{longdiv}
\begin{document}
\longdiv{52}{2}
\end{document}
如果有另一个包可以做同样的事情或提供更好的控制(例如显示多少步骤等),那就太好了。
答案1
以下是我的尝试。我修改了longdiv.tex
并创建\examlongdiv
。我认为你不会用这个来吓跑你的学生,所以不支持大于 999 999 999 的数字。;-)
也许需要一些解释。我的方法基本上是:
用破折号替换每个数字。
详情如下
- 测量单个数字的自然宽度,例如
\digitwidth
。此宽度用于确定替换破折号的长度。可以通过更改 来调整破折号两侧的空白\digitspace
。 - 计数器中存储了位数
\numofdigits
。这给出了替换中间商和余数所需的破折号数量。 - 用来
\loop
绘制\digitdash
所需数量的。
以下是 MWE:
\documentclass{article}
\input{longdiv}
\newlength\digitwidth
\settowidth\digitwidth{$0$}
\newcommand*\digitspace{0.05em}
\newcommand*\digitdash{%
\hspace*{\digitspace}%
\rule{\dimexpr\digitwidth-\digitspace-\digitspace\relax}{0.4pt}%
\hspace*{\digitspace}%
}
\newcount\numofdigits
\newcommand*\getnumofdigits[1]{%
\ifnum#1<10 1\else
\ifnum#1<100 2\else
\ifnum#1<1000 3\else
\ifnum#1<10000 4\else
\ifnum#1<100000 5\else
\ifnum#1<1000000 6\else
\ifnum#1<10000000 7\else
\ifnum#1<100000000 8\else
9%
\fi\fi\fi\fi\fi\fi\fi\fi
}
\newcommand*\examlongdiv[2]{%
\vtop{\normalbaselines \offinterlineskip
\setbox\strutbox\hbox{\vrule height 2.1ex depth .5ex width0ex}%
\def\showdig{%
$\numofdigits=\getnumofdigits{\the\LDscratch}%
\underline{%
\loop
\ifnum\numofdigits>0
\digitdash
\advance\numofdigits -1 %
\repeat
\strut}$\cr
\numofdigits=\getnumofdigits{\the\rtot}%
\loop
\ifnum\numofdigits>0
\digitdash
\advance\numofdigits -1 %
\repeat
\strut\cr
\noalign{\kern-.2ex}}%
\global\rtot=#1\relax
\count0=\rtot\divide\count0by#2\edef\quotient{\the\count0}%\show\quotient
% make list macro out of digits in quotient:
\def\temp##1{\ifx##1\temp\else \noexpand\dodig ##1\expandafter\temp\fi}%
\edef\routine{\expandafter\temp\quotient\temp}%
% process list to give power-of-ten:
\def\dodig##1{\global\multiply\gpten by10 }\global\gpten=1 \routine
% to display effect of one digit in quotient (zero ignored):
\def\dodig##1{\global\divide\gpten by10
\LDscratch =\gpten
\multiply\LDscratch by##1%
\multiply\LDscratch by#2%
\global\advance\rtot-\LDscratch \relax
\ifnum\LDscratch>0 \showdig \fi % must hide \cr in a macro to skip it
}%
\tabskip=0pt
\halign{\hfil##\cr % \halign for entire division problem
$\numofdigits=\getnumofdigits{\quotient}%
\loop
\ifnum\numofdigits>0
\digitdash
\advance\numofdigits -1 %
\repeat$\strut\cr
#2$\,\overline{\vphantom{\big)}%
\hbox{\smash{\raise3.5\fontdimen8\textfont3\hbox{$\big)$}}}%
\mkern2mu \the\rtot}$\cr\noalign{\kern-.2ex}
\routine \cr % do each digit in quotient
}}}
\begin{document}
\examlongdiv{52}{2}
\examlongdiv{987654321}{26}
\end{document}