为了实现更好的对齐,我尝试使用该包将复数对齐到表格列的中间siunitx
,但数字是根据小数点在实部上的位置来居中的。
这是我的 MWE:
\documentclass[a4paper]{article}
\usepackage{booktabs}
\usepackage{array}
\usepackage{siunitx}
\sisetup{
output-complex-root = \ensuremath{\mathrm{j}},
complex-root-position = before-number
}
\begin{document}
\begin{table}[h!]
\caption{Bus Loads}
\label{fig:figurename}
\centering
\begin{tabular}{l|S[]}
\toprule
\textbf{Bus} & \multicolumn{1}{c}{\textbf{Bus Load (MVA)}} \\
\midrule
b1 & 50 + j30.99 \\
b2 & 170 + j105.35\\
b3 & 200 + j123.94 \\
b4 & 150 + j49.58 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
输出如下:
我希望复数能够更整齐地排列在列的中心。有什么办法吗?
我尝试将选项传递table-number-alignment=left
给列,但虚部却消失了:
答案1
现在我们知道复数不能完全支持包裹siunitx
,这里有一个适应的解决方法杰伊博士的解决方案和用途包裹collcell
自动格式化数字,使整数实部右对齐,以便符号+
对齐:
笔记:
- 实数部分目前是右对齐的——可以增强为小数点对齐。如果需要,请告诉我。
- 虚部左对齐。这也可以根据需要进行调整。
代码:
\documentclass[a4paper]{article}
\usepackage{booktabs}
\usepackage{array}
\usepackage{siunitx}
\usepackage{xstring}
\usepackage{collcell}
\sisetup{
output-complex-root = \ensuremath{\mathrm{j}},
complex-root-position = before-number
}
\newlength{\WidestRealNum}
\settowidth{\WidestRealNum}{$99999$}
\newcommand*{\ApplyNumFormatting}[1]{%
\StrBefore{#1}{+}[\RealPart]%
\StrBehind{#1}{j}[\ImagPart]%
$\makebox[\WidestRealNum][r]{$\RealPart$} + j\,\ImagPart$%
}%
\newcolumntype{N}{>{\collectcell\ApplyNumFormatting}l<{\endcollectcell}}
\begin{document}
\begin{table}[h!]
\caption{Bus Loads}
\label{fig:figurename}
\centering
\begin{tabular}{l|N}
\toprule
\textbf{Bus} & \multicolumn{1}{c}{\textbf{Bus Load (MVA)}} \\
\midrule
b1 & 50 + j 30.99 \\
b2 & 170 + j105.35\\
b3 & 200 + j123.94 \\
b4 & 150 + j49.58 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案2
该siunitx
软件包主要关注物理量(带单位的数字)。因此,第一个版本甚至没有涵盖复数。对于版本 2,我被要求添加它们,因为它们在电子学的某些部分中出现。但是,由于这是一种相对不常见的情况,对复数的支持有些有限,特别是对具有实数和复数部分的数字的功能并不完整。除了代码复杂性之外,其中一个原因是在最常见的情况下保持合理的性能:覆盖的情况越多,需要的测试就越多,等等。
对于表格中的数字,实部和复部对我来说自然会形成两个单独的列
\documentclass[a4paper]{article}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{tabular}{lS[table-format = 3]S[table-format = 3.2]}
\toprule
\textbf{Bus} & \multicolumn{2}{c}{\textbf{Bus Load (MVA)}} \\
& {Real} & {Complex} \\
\midrule
b1 & 50 & 30.99 \\
b2 & 170 & 105.35 \\
b3 & 200 & 123.94 \\
b4 & 150 & 49.58 \\
\bottomrule
\end{tabular}
\end{document}
因为这会删除每个值中的+
冗余。j
尽管如此,我始终愿意考虑扩展siunitx
,特别是如果请求附带一个链接,该链接展示了已发表的文献中请求格式的使用情况。请随时在追踪器。
答案3
嗯,它似乎siunitsx
在复数的表格添加方面存在问题,对于实数,您的示例正确对齐。对于该软件包的开发人员来说,关于复数还有一些事情要做。您可以尝试:
\documentclass[a4paper]{article}
\usepackage{booktabs}
\usepackage{array}
\usepackage{siunitx}
\sisetup{
output-complex-root = \ensuremath{\mathrm{j}},
complex-root-position = before-number
}
\begin{document}
\begin{table}[h!]
\caption{Bus Loads}
\label{fig:figurename}
\centering
\begin{tabular}{l|S[]}
\toprule
\textbf{Bus} & \multicolumn{1}{c}{\textbf{Bus Load (MVA)}} \\
\midrule
b1 & \num{ 50 + j 30.99} \\
b2 & \num{170 + j105.35}\\
b3 & \num{200 + j123.94} \\
b4 & \num{150 + j49.58} \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
对于长表来说,编写起来有点麻烦,但至少它可以很好地对齐复数: