使用 siunitx 将复数对齐到表格中心

使用 siunitx 将复数对齐到表格中心

为了实现更好的对齐,我尝试使用该包将复数对齐到表格列的中间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}

输出如下:

MWE 输出

我希望复数能够更整齐地排列在列的中心。有什么办法吗?

我尝试将选项传递table-number-alignment=left给列,但虚部却消失了:

带有 table-number-alignment=left 的 MWE 输出

答案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}

对于长表来说,编写起来有点麻烦,但至少它可以很好地对齐复数:

在此处输入图片描述

相关内容