
你會如何在 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
.表格的最後一行同樣是根據總計建構的。