longdiv 宏没有答案

longdiv 宏没有答案

此代码(使用)产生

\documentclass{article} 
\input{longdiv} 
\begin{document}
\longdiv{52}{2}
\end{document}

按输出

我想用 _s 替换答案。有人能建议实现此目的的正确方法吗? 期望输出

如果有另一个包可以做同样的事情或提供更好的控制(例如显示多少步骤等),那就太好了。

答案1

以下是我的尝试。我修改了longdiv.tex并创建\examlongdiv。我认为你不会用这个来吓跑你的学生,所以不支持大于 999 999 999 的数字。;-)

也许需要一些解释。我的方法基本上是:

用破折号替换每个数字。

详情如下

  1. 测量单个数字的自然宽度,例如\digitwidth。此宽度用于确定替换破折号的长度。可以通过更改 来调整破折号两侧的空白\digitspace
  2. 计数器中存储了位数\numofdigits。这给出了替换中间商和余数所需的破折号数量。
  3. 用来\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}

考试长除法

相关内容