当我使用xlop
例如乘法如下:
\documentclass{article}
\usepackage{xlop}
\begin{document}
\opmul{0.436}{0.35}
\end{document}
我得到以下输出:
但是我需要以下风格:
我怎样才能实现这个目标?
我想通过对宏进行一些修改应该可以实现,\op@muldisplayone
但是我的纯文本能力太有限,无法做到这一点......
答案1
不是xlop
,但是只要付出一些努力expl3
就可以做到。
\documentclass{article}
\usepackage{xparse,l3regex}
\ExplSyntaxOn
\NewDocumentCommand{\showmult}{mm}
{
\anna_showmult:nn { #1 } { #2 }
}
\tl_new:N \l__anna_temp_tl
\tl_new:N \l__anna_factora_tl
\tl_new:N \l__anna_factorb_tl
\tl_new:N \l__anna_result_tl
\tl_new:N \l__anna_table_tl
\seq_new:N \l__anna_partial_products_seq
\cs_new_protected:Npn \anna_showmult:nn #1 #2
{
% remove leading zeros and the decimal point
\tl_set:Nn \l__anna_factora_tl { #1 }
\tl_set:Nn \l__anna_factorb_tl { #2 }
\regex_replace_all:nnN { (\A 0\.0*|\.) } { } \l__anna_factora_tl
\regex_replace_all:nnN { (\A 0\.0*|\.) } { } \l__anna_factorb_tl
\tl_reverse:N \l__anna_factorb_tl
% compute the partial products
\tl_clear:N \l__anna_padding_tl
\seq_clear:N \l__anna_partial_products_seq
\tl_map_inline:Nn \l__anna_factorb_tl
{
\seq_put_right:Nx \l__anna_partial_products_seq
{ \int_to_arabic:n { ##1 * \l__anna_factora_tl } \l__anna_padding_tl }
\tl_put_right:Nn \l__anna_padding_tl { \anna_padding: }
}
\seq_reverse:N \l__anna_partial_products_seq
% do the multiplication
\tl_set:Nx \l__anna_result_tl { \fp_eval:n { #1 * #2 } }
% prepare the table
\tl_set:Nn \l__anna_table_tl { #1\cdot#2 \\ \hline }
\tl_put_right:Nx \l__anna_table_tl
{ \seq_use:Nnnn \l__anna_partial_products_seq { \\ } { \\ } { \\ } }
\tl_put_right:Nn \l__anna_table_tl { \\ \hline \l__anna_result_tl }
$\begin{array}{@{}r@{}}
\l__anna_table_tl
\end{array}$
}
\cs_new_protected:Npn \anna_padding: { \hphantom{0} }
\ExplSyntaxOff
\begin{document}
\showmult{0.436}{0.35}
\medskip
\showmult{1.2}{34}
\medskip
\showmult{1.222}{3.4}
\medskip
\showmult{0.022}{3.04}
\end{document}