Написание ручного сложения двух чисел

Написание ручного сложения двух чисел

Как бы вы написали ручное суммирование чисел в 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, выводится только сумма.

При обычном вызове оцениваются некоторые возможные параметры: spacingis для межцифрового пробела (по умолчанию ноль), alignis для общего выравнивания таблицы, it can be c(по умолчанию) tили b. Пробелы вокруг +обязательного аргумента игнорируются.

Затем таблица строится путем сохранения слагаемых с межзначным пробелом в новой последовательности, которая используется в tabular. Последняя строка таблицы строится аналогичным образом из итога.

введите описание изображения здесь

Связанный контент