
Como você escreveria uma soma manual de números no TeX? Ou seja, algo assim (não necessariamente idêntico):
Responder1
Uma solução possível poderia ser uma tabela simples.
\begin{table}[h]
\begin{tabular}{r}
1234 \\
345 \\
+6543 \\
345 \\ \hline
8467
\end{tabular}
\end{table}
Editar: resulta no seguinte:
Responder2
Apenas por diversão, ofereço esta alternativa automatizada. O \convertchar
transforma a entrada separada por espaço em uma +
entrada separada, à qual \numexpr
pode ser aplicada. Eu uso pilhas alinhadas à direita para compor o resultado.
\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}
Responder3
Deixe o cálculo para o 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}
A primeira tarefa é calcular a soma, armazenando-a em uma variável inteira. Os resumos também são armazenados em sequência, para processamento posterior. Se just \computesum*
for chamado, apenas a soma será impressa.
Com a chamada normal, algumas opções possíveis são avaliadas: spacing
é para espaço entre dígitos (padrão zero), align
é para o alinhamento geral da tabular, pode ser c
(padrão), t
ou b
. Os espaços +
no argumento obrigatório são ignorados.
Em seguida, a tabela é construída salvando os somatórios com o espaço entre dígitos em uma nova sequência que é usada em um arquivo tabular
. A última linha da tabela é construída de forma semelhante a partir do total.