我正在尝试为朋友做一些 LaTeX 表格魔法,但遇到了一个奇怪的问题,我一直无法找到解决方案。
我使用siunitx
(以及booktabs
) 来对齐表格中的一些值。这些值实际上是金额 — — 因此货币符号 (即\,€
) 会附加到数字后面。
从所提供的示例中可以看出,添加负值会影响货币符号的定位。请注意,值的对齐方式符合预期(即在小数点分隔符处对齐);只是附加的符号放错了位置。
代码如下:
\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{output-decimal-marker={,},group-separator ={.},group-minimum-digits=4,detect-all}
\begin{document}
\begin{table}
\centering
\begin{tabular}{@{}l*{2}{S}@{}}
\toprule
\multicolumn{1}{c}{\textbf{Col 1}} & \multicolumn{1}{c}{\textbf{Col 2}} & \multicolumn{1}{c}{\textbf{Col 3}} \\
\midrule
Some description. & & 0,11\,€ \\
Other stuff. & 18,00\,€ & -123,45\,€ \\
More things. & -0,29\,€ & 11,00\,€ \\
Items. & 0,29\,€ & \\
\midrule
\multicolumn{1}{r}{\textbf{Sum:}} & 9,99\,€ & 11,11\,€ \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
结果如下:
(不幸的是,由于并非所有字段都包含数字,我无法指定S<{\,€}
为表格列,令人惊讶的是,它确实修复了其中一个错误字段,但没有修复另一个......)
我知道,按照我的方法,小数分隔符和货币符号不一定同时对齐,但我可以接受。(我想我看到了一个解决方案,其中分隔符和符号都对齐;但即使是那个解决方案也没有让我走多远——尽管也许理解和实施该解决方案可以解决我的问题,甚至“更正确”?)
任何帮助将不胜感激!
谢谢,尼古拉
答案1
如果您不siunitx
“告知”,则用于以小数点为中心放置小数点的策略是将其放在列的中心。这意味着在您的示例中,输出中有很多空白。更好的方法是siunitx
准确说明您需要多少空间,理想情况下将包括任何“帖子文本”部分。这可能会导致tabular
标题类似于
{
@{}
l
S[table-format = -2.2, table-space-text-post = {\,€}]
S[table-format = -3.2, table-space-text-post = {\,€}]
@{}
}
(我还会将第一列和第 s 列标题分别修改为\multicolumn{1}{@{}l}{\textbf{Col 1}}
和\multicolumn{1}{c@{}}{\textbf{Col 3}}
:与当前问题无关,但避免了一些杂散间距。)
不过,我通常会将单位从表格主体移动到标题,因此更像
\begin{tabular}
{
@{}
l
S[table-format = -2.2]
S[table-format = -3.2]
@{}
}
\toprule
{Col 1} & \multicolumn{2}{c@{}}{Cost/€} \\
& {Col 2} & {Col 3} \\
\midrule
Some description. & & 0,11 \\
Other stuff. & 18,00 & -123,45 \\
More things. & -0,29 & 11,00 \\
Items. & 0,29 & \\
\cmidrule(l){2-3}
Sum & 9,99 & 11,11 \\
\bottomrule
\end{tabular}