2つの数値の合計を手動で書く

2つの数値の合計を手動で書く

TeX で数値を手動で合計するにはどうすればよいでしょうか? つまり、次のようになります (必ずしも同一ではありません):

                                                 

答え1

考えられる解決策の 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}

最初のタスクは、合計を計算し、それを整数変数に格納することです。加数も、後で処理するためにシーケンスに格納されます。 just が\computesum*呼び出されると、合計のみが出力されます。

通常の呼び出しでは、いくつかの可能なオプションが評価されます:spacingは桁間のスペース用 (デフォルトは 0)、alignは表全体の配置用、 はc(デフォルト)、tまたは になりますb。必須引数の周囲のスペース+は無視されます。

次に、加数を桁間スペースとともに新しいシーケンスに保存して、表を作成しますtabular。表の最後の行も同様に合計から作成されます。

ここに画像の説明を入力してください

関連情報