我正在尝试制作一个美观的除法过程,其中每一步的余数都显示在侧面。我想要制作出这样的结果(但当然,如果需要,可以将其扩展到更长的除法):
答案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}
可选参数可以\showbase
是c
(默认),t
或者b
(传递给底层tabular
)。
开始递归,将行逐行添加到标记列表变量;当商为零时结束。