侧面显示除法和余数

侧面显示除法和余数

我正在尝试制作一个美观的除法过程,其中每一步的余数都显示在侧面。我想要制作出这样的结果(但当然,如果需要,可以将其扩展到更长的除法):

答案1

\documentclass{article}
\usepackage{stackengine}
\def\rlwd{.5pt} \def\rlht{2.2ex} \def\rldp{.5ex}
\def\mydiv#1{~%
  \rule[-\rldp]{\rlwd}{\rlht}%
  \setbox0=\hbox{~#1}%
  \stackunder[\dimexpr\rldp-\rlwd]{~#1}{\rule{\wd0}{\rlwd}}%
}
\begin{document}
\begin{tabular}{rl}
4\mydiv{198} &\\
4\mydiv{49}  & remainder 2\\
4\mydiv{12}  & remainder 1\\
4\mydiv{3}   & remainder 0\\
0            & remainder 3
\end{tabular}
\end{document}

在此处输入图片描述

答案2

这也使您摆脱了实际计算的负担。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\showbase}{O{c}mm}
 {% #1 is the alignment for tabular
  % #2 is the number to be manipulated
  % #3 is the base
  \induktio_showbase:nnn { #1 } { #2 } { #3 }
 }

\tl_new:N \l__induktio_table_contents_tl
\int_new:N \l__induktio_quotient_int
\int_new:N \l__induktio_remainder_int
\bool_new:N \l__induktio_first_row_bool

\cs_new_protected:Npn \__induktio_add_row:nn #1 #2
 {% #1 is the base, #2 is the quotient
  \tl_put_right:Nx \l__induktio_table_contents_tl
   {
    \int_compare:nF { #2 == 0 } { #1~ }
    \__induktio_quotient:n { #2 }
    &
    \bool_if:NF \l__induktio_first_row_bool
     {
      remainder~\int_to_arabic:n { \l__induktio_remainder_int }
     }
    \exp_not:N \\
   }
 }

\cs_new_protected:Npn \induktio_showbase:nnn #1 #2 #3
 {
  \tl_clear:N \l__induktio_table_contents_tl
  \bool_set_true:N \l__induktio_first_row_bool
  \int_set:Nn \l__induktio_quotient_int { #2 }
  \__induktio_recursion:n { #3 }
  \begin{tabular}[#1]{@{}rl@{}}
  \tl_use:N \l__induktio_table_contents_tl
  \end{tabular}
 }

\cs_new_protected:Npn \__induktio_recursion:n #1
 {% #1 is the base
  \__induktio_add_row:nn { #1 } { \int_to_arabic:n { \l__induktio_quotient_int } }
  \bool_set_false:N \l__induktio_first_row_bool
  \int_set:Nn \l__induktio_remainder_int
   {
    \int_mod:nn { \l__induktio_quotient_int } { #1 }
   }
  \int_set:Nn \l__induktio_quotient_int
   {
    \int_div_truncate:nn { \l__induktio_quotient_int } { #1 }
   }
  \int_compare:nTF { \l__induktio_quotient_int == 0 }
   {
    \__induktio_add_row:nn { #1 } { \int_to_arabic:n { \l__induktio_quotient_int } }
   }
   {
    \__induktio_recursion:n { #1 }
   }
 }

\cs_new_protected:Npn \__induktio_quotient:n #1
 {
  \int_compare:nTF { #1 == 0 }
   {
    #1
   }
   {
    \begin{tabular}{@{}r@{}}\vline\ #1\\\hline\end{tabular}
   }
 }
\ExplSyntaxOff

\newcommand{\semibox}

\begin{document}
\showbase[t]{198}{4}\qquad
\showbase[t]{198}{2}
\end{document}

可选参数可以\showbasec(默认),t或者b(传递给底层tabular)。

开始递归,将行逐行添加到标记列表变量;当商为零时结束。

在此处输入图片描述

相关内容