我需要排版包含两个参数(变量)和一个绝对值的列向量。所有系数都可以是整数或小数。我希望实现所有组件都很好地对齐(小数点处的数字(如果有)、变量和运算符)。
数学家协会
\documentclass{article}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{siunitx}
\begin{document}
\section{Not aligned}
\subsection{Integer coefficients}
\begin{math}
\begin{pmatrix}
2 - 2 \, s + t \\
28 - 3 \, t \\
-14 - 3 \, s + 4 \, t
\end{pmatrix}
\end{math}
\subsection{Decimal coefficients}
\begin{math}
\begin{pmatrix}
2 - \num{2,3} \, s + t \\
28 - \num{3,1} \, t \\
\num{-14,75} - 3 \, s + 4 \, t
\end{pmatrix}
\end{math}
\section{Manually aligned}
\subsection{Integer coefficients}
\begin{math}
\left(
\begin{array}{rcrcr}
2 & - & 2 \, s & + & t \\
28 & & & - & 3 \, t \\
-14 & - & 3 \, s & + & 4 \, t
\end{array}
\right)
\end{math}
\subsection{Decimal coefficients}
\begin{math}
\left(
\begin{array}{rcrcr}
2 & - & \num{2,3} \, s & + & t \\
28 & & & - & \num{3,1} \, t \\
\num{-14,75} & - & 3 \, s & + & 4 \, t
\end{array}
\right)
\end{math}
\end{document}
产生以下结果。
第 2 节中的两个示例中,运算符前后的间距都太大。第 2.2 节中的数字小数点未对齐。
(1)我该如何解决这些问题?
(2)是否有任何包可以自动完成这项工作,而无需手动放置&
字符?
答案1
环境的列规范array
不限于c
、l
或r
:
\documentclass{article}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{siunitx}
\begin{document}
\begin{math}
\left(
\begin{array}{
@{\,}
S[table-format=-2.2]
@{\>}c@{\>}
S[table-format=1.1]
@{\,}c@{\>}c@{\>}
S[table-format=1.1]
@{\,}c
@{\,}
}
2 & - & 2,3 & s & + & & t \\
28 & & & & - & 3,1 & t \\
-14,75 & - & 3 & s & + & 4 & t
\end{array}
\right)
\end{math}
\end{document}
然而,我怀疑垂直对齐有点过度,简单的非对齐版本就足够了。
答案2
如果您不介意小数系数不在小数点逗号上对齐,该systeme
包会为您提供一个简单而简短的代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{siunitx}
\usepackage{systeme}
\begin{document}
\subsection*{Integer coefficients}
\begin{math}
\sysdelim()\systeme{2-2s + t, 28-3t, -14-3s + 4t}
\end{math}
\subsection*{Decimal coefficients}
\begin{math}
\sisetup{ copy-decimal-marker}
\sysdelim()\systeme{\num{2} - \num{2,3}s + t,\num{28} - \num{3,1}t, -\num{14,75} - 3s + 4t}
\end{math}
\end{document}
答案3
另外两个array
基于 的解决方案:第一个是简单的数字右对齐,第二个是数字小数对齐。
\documentclass{article}
\usepackage{array}
\newcolumntype{C}{>{{}}c<{{}}}
\usepackage{siunitx}
\newcolumntype{T}[1]{S[table-format=#1]}
\begin{document}
\[
\setlength\arraycolsep{0pt}
\left(\begin{array}{r C r C r}
2 & - & 2.3s & + & t \\
28 & & & - & 3.1 t \\
-14.75 & - & 3s & + & 4 t
\end{array}\right)
\]
\[
\setlength\arraycolsep{0pt}
\left(\begin{array}{T{-2.2} C T{1.1}r C T{1.1}r}
2 & - & 2.3 & s & + & & t \\
28 & & & & - & 3.1 & t \\
-14.75 & - & 3 & s & + & 4 & t
\end{array}\right)
\]
\end{document}