考虑以下示例。
代码
\documentclass{article}
\usepackage{mathtools}
\usepackage{ulem}
\newcommand*\mlr{\hspace{6em}}
\newcommand*\addition[4]{%
\begin{array}{@{} r @{,} l @{}}
#1 & #2 \\
+ \hspace{0.2em} #3 & #4 \\
\hline
\end{array}%
}
\begin{document}
\begin{equation*}
\addition{1}{14}{14}{3}
\mlr
\addition{1}{2}{1}{3}
\mlr
\addition{20}{1}{2}{17}
\mlr
\addition{5}{9}{2}{7}
\end{equation*}
\end{document}
输出
问题
在第三个和中,我希望
+
符号与 的左侧对齐20.1
(而不是2
在的下方20.1
)。通常,我希望加号与整数部分位数最多的数字的左侧对齐。如何获得与 长度相同的双下划线
\baselineskip
?\hline
我\hline
希望自动绘制具有正确长度的双下划线。(我知道我可以使用 手动更正此问题\hphantom
。)
答案1
为标志分配一个列+
,就这么简单。
\documentclass{article}
\usepackage{amsmath}
\newcommand*\addition[4]{%
\begin{array}{@{} r@{} r @{,} l @{}}
& #1 & #2 \\
+ & #3 & #4 \\
\hline
\\
\hline\hline
\end{array}%
}
\begin{document}
\begin{equation*}
\addition{1}{14}{14}{3}
\qquad
\addition{1}{2}{1}{3}
\qquad
\addition{20}{1}{2}{17}
\qquad
\addition{5}{9}{2}{7}
\end{equation*}
\end{document}
不同的实现方式siunitx
,其中第一个参数指定数字的位数:
\documentclass{article}
\usepackage{amsmath,siunitx}
\sisetup{output-decimal-marker={,}}
\NewDocumentCommand{\addition}{mmm}{%
\begin{array}{@{} r@{\,} S[table-format=#1] @{}}
& #2 \\
+ & #3 \\
\hline
\\
\hline\hline
\end{array}%
}
\begin{document}
\begin{equation*}
\addition{2.2}{1,14}{14,3}
\qquad
\addition{1.1}{1,2}{1,3}
\qquad
\addition{2.2}{20,1}{2,17}
\qquad
\addition{2.0}{59}{27}
\end{equation*}
\end{document}
通过更多的工作,我们可以避免指定数字的需要。
\documentclass{article}
\usepackage{amsmath,siunitx}
\sisetup{output-decimal-marker={,}}
\ExplSyntaxOn
\NewDocumentCommand{\addition}{mm}
{
\tl_set:Nn \l_svend_sum_first_tl { #1 }
\tl_replace_once:Nnn \l_svend_sum_first_tl { . } { , }
\tl_set:Nn \l_svend_sum_second_tl { #2 }
\tl_replace_once:Nnn \l_svend_sum_second_tl { . } { , }
\seq_set_split:NnV \l_svend_sum_first_seq { , } \l_svend_sum_first_tl
\seq_set_split:NnV \l_svend_sum_second_seq { , } \l_svend_sum_second_tl
\tl_set:Nx \l_svend_sum_first_tl
{
\int_to_arabic:f
{
\int_max:nn
{ \tl_count:f { \seq_item:Nn \l_svend_sum_first_seq { 1 } } }
{ \tl_count:f { \seq_item:Nn \l_svend_sum_second_seq { 1 } } }
}
}
\tl_set:Nx \l_svend_sum_second_tl
{
\int_to_arabic:f
{
\int_max:nn
{ \tl_count:f { \seq_item:Nn \l_svend_sum_first_seq { 2 } } }
{ \tl_count:f { \seq_item:Nn \l_svend_sum_second_seq { 2 } } }
}
}
\begin{array}{@{} r@{\,} S[table-format=\l_svend_sum_first_tl.\l_svend_sum_second_tl] @{}}
& #1 \\
+ & #2 \\
\hline
\\
\hline\hline
\end{array}%
}
\tl_new:N \l_svend_sum_first_tl
\tl_new:N \l_svend_sum_second_tl
\seq_new:N \l_svend_sum_first_seq
\seq_new:N \l_svend_sum_second_seq
\cs_generate_variant:Nn \int_to_arabic:n { f }
\cs_generate_variant:Nn \tl_count:n { f }
\ExplSyntaxOff
\begin{document}
\begin{equation*}
\addition{1,14}{14,3}
\qquad
\addition{1,2}{1,3}
\qquad
\addition{20,1}{2,17}
\qquad
\addition{59}{27}
\end{equation*}
\end{document}
输出与以前相同。