手动计算两个数字的和

手动计算两个数字的和

如何在 TeX 中手动编写数字求和?也就是说,像这样(不一定相同):

                                                 

答案1

一个可能的解决方案可能是一个简单的表格。

\begin{table}[h]
\begin{tabular}{r}
1234  \\
345   \\
+6543 \\
345   \\ \hline
8467 
\end{tabular}
\end{table}

编辑:结果如下: 在此处输入图片描述

答案2

只是为了好玩,我提供了这个自动化替代方案。\convertchar将空格分隔的输入转换+\numexpr可以应用的单独输入。我使用右对齐堆栈来组成结果。

\documentclass{article}
\usepackage{stringstrings,stackengine}
\newcounter{mysum}
\newcommand\showsum[1]{%
  \convertchar[q]{#1}{ }{+}%
  \setcounter{mysum}{\numexpr\thestring\relax}%
  \def\stackalignment{r}%
  {\ttfamily\stackunder{\underline{+\Longstack{#1}}}{\themysum}}%
}
\begin{document}
\showsum{1 2 3 4}  $\qquad$
\showsum{23 567 34 32}  $\qquad$
\showsum{1 3567 2334 3352 567}
\end{document}

在此处输入图片描述

答案3

将计算留给 TeX。;-)

\documentclass{article}
\usepackage{xparse,array,booktabs}

\ExplSyntaxOn
\NewDocumentCommand{\computesum}{sO{}m}
 {
  \chubakueno_computesum:n { #3 }
  \IfBooleanTF{#1}
   {
    \ensuremath { \int_to_arabic:n { \l_chubakueno_sum_int } }
   }
   {
    \group_begin:
    \chubakueno_typesetsum:n { #2 }
    \group_end:
   }
 }

\int_new:N \l_chubakueno_sum_int
\seq_new:N \l_chubakueno_summands_seq
\seq_new:N \l_chubakueno_output_summands_seq
\seq_new:N \l__chubakueno_temp_seq
\tl_new:N \l_chubakueno_total_tl
\tl_new:N \l__chubakueno_temp_tl
\cs_generate_variant:Nn \int_set:Nn { Nx }

\keys_define:nn { chubakueno/sum }
 {
  spacing .dim_set:N = \l_chubakueno_spacing_dim,
  align   .tl_set:N  = \l_chubakueno_align_tl,
  align   .initial:n = c,
 }

\cs_new_protected:Npn \chubakueno_computesum:n #1
 {
  \int_set:Nn \l_chubakueno_sum_int { #1 }
  \seq_set_split:Nnn \l_chubakueno_summands_seq { + } { #1 }
 }

\cs_new_protected:Npn \chubakueno_typesetsum:n #1
 {
  \keys_set:nn { chubakueno/sum } { #1 }
  \dim_compare:nTF { \l_chubakueno_spacing_dim = 0pt }
   {% do nothing if the space is zero
    \seq_set_eq:NN \l_chubakueno_output_summands_seq  \l_chubakueno_summands_seq
    \tl_set:NV \l_chubakueno_total_tl \l_chubakueno_sum_int
   }
   {% else add the interline space
    \seq_map_inline:Nn \l_chubakueno_summands_seq
     {
      \seq_set_split:Nnn \l__chubakueno_temp_seq { } { ##1 }
      % insert the interdigits space
      \__chubakueno_insert_space:N \l__chubakueno_temp_tl
      \seq_put_right:NV \l_chubakueno_output_summands_seq \l__chubakueno_temp_tl
     }
    \seq_set_split:NnV \l__chubakueno_temp_seq { } \l_chubakueno_sum_int
    \__chubakueno_insert_space:N \l_chubakueno_total_tl
   }
  \begin{tabular} [\l_chubakueno_align_tl] { >{$}r<{$} @{$\;$} >{$}r<{$} }
  & \seq_use:Nnnn \l_chubakueno_output_summands_seq { \\ + & } { \\ & } { \\ + & }
  \\
  \midrule
  & \tl_use:N \l_chubakueno_total_tl
  \end{tabular}
 }

\cs_new_protected:Npn \__chubakueno_insert_space:N #1
 {
  \tl_set:Nx #1
   {
    \seq_use:Nn \l__chubakueno_temp_seq { \skip_horizontal:n { \l_chubakueno_spacing_dim } }
   }
 }

\ExplSyntaxOff

\begin{document}

Just the sum: \computesum*{345+6543+345}

The unspaced sum: \computesum{345+6543+345}

Spaced sum: \computesum[spacing=.1em,align=b]{640+231+100+91+1003}

Top aligned: \computesum[align=t,spacing=.2em]{333 + 333 + 333 + 2}

\end{document}

第一个任务是计算总和,并将其存储到整数变量中。被加数也存储在序列中,以供稍后处理。如果\computesum*调用 just,则只打印总和。

使用正常调用时,会评估一些可能的选项:spacing表示数字间距(默认为零),align表示表格的整体对齐方式,可以是c(默认),t或。强制参数b周围的空格将被忽略。+

然后,通过将加数与数字间空格一起保存在 中使用的新序列中来构建表格tabular。表格的最后一行也是从总数构建的。

在此处输入图片描述

相关内容