pgfplotstable 环境下科学显示对齐问题

pgfplotstable 环境下科学显示对齐问题

下面的 TeX 片段生成了相对好看的表格。但是,它有两个问题。

如果我将第 3 列中的 6 个字符中的任何一个更改为 ,则会出现错误。修复错误的唯一方法是在 之后 \SI{12.1e4}放置另一个文本字符,例如。\\SI{12.1e4}

并且存在对齐问题(非预期的缩进)1.4。我需要在我的论文中创建大量此类图表,并且确实需要一个统一/更好的解决方案,而我错过了相同的代码片段。

\documentclass{article}    
\usepackage[version=3]{mhchem} % Formula subscripts using \ce{}    

\usepackage{unicode-math}
\usepackage{amsmath}
\usepackage{siunitx}
\usepackage{xcolor}
\usepackage{booktabs,colortbl, array}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}
\definecolor{rulecolor}{RGB}{0,71,171}
\definecolor{tableheadcolor}{gray}{0.92}    

\newcommand*\mycommand[1]{\texttt{\emph{#1}}}    

\newcommand{\topline}{ %
        \arrayrulecolor{rulecolor}\specialrule{0.1em}{\abovetopsep}{0pt}%
        \arrayrulecolor{tableheadcolor}\specialrule{\belowrulesep}{0pt}{0pt}%
        \arrayrulecolor{rulecolor}}
% Command \midline consists of 3 rules (top colour tableheadcolor, middle colour black, bottom colour white)
\newcommand{\midtopline}{ %
        \arrayrulecolor{tableheadcolor}\specialrule{\aboverulesep}{0pt}{0pt}%
        \arrayrulecolor{rulecolor}\specialrule{\lightrulewidth}{0pt}{0pt}%
        \arrayrulecolor{white}\specialrule{\belowrulesep}{0pt}{0pt}%
        \arrayrulecolor{rulecolor}}
% Command \bottomline consists of 2 rules (top colour
\newcommand{\bottomline}{ %
        \arrayrulecolor{white}\specialrule{\aboverulesep}{0pt}{0pt}%
        \arrayrulecolor{rulecolor} %
        \specialrule{\heavyrulewidth}{0pt}{\belowbottomsep}}%    


\newcommand{\midheader}[2]{%
        \midrule\topmidheader{#1}{#2}}
\newcommand\topmidheader[2]{\multicolumn{#1}{c}{\textsc{#2}}\\%
                \addlinespace[0.5ex]}    

\pgfplotstableset{normal/.style ={%
        header=true,
        string type,
        font=\addfontfeature{Numbers={Monospaced}}\small,
        column type=l,
        every odd row/.style={
            before row=
        },
        every head row/.style={
            before row={\topline\rowcolor{tableheadcolor}},
            after row={\midtopline}
        },
        every last row/.style={
            after row=\bottomline
        },
        col sep=&,
        row sep=\\
    }
}    


\begin{document}    

   \begin{table}
        \centering
        \caption{Thermal and electrical properties of materials[NOT COMPLETE].}
        \pgfplotstabletypeset[normal,
                columns/eg/.style={
                column name={k (\SI{}{\watt\per\meter\per\kelvin})},
                dec sep align},
                columns/mn/.style={
                column name={C (\SI{}{\joule\per\meter\squared\per\kelvin})}},
                columns/ma/.style={
                column type= {p {3cm} },
                column name={Material}},
                columns/au/.style={
                column name={$\sigma$ (\SI{}{\per\ohm\per\meter})}}
        ]{ %
        ma         &  eg  & au & mn \\
        \topmidheader{5}{GST}
        Amorph                    & 0.17 & 3 & 6 \\
        Crystalline              & 0.5 & 2770 & 6 \\
        \midheader{5}{Other Compounds}
        Aluminum          & 25.0 & \SI{37e6} &  \SI{2.15e6} \   \\
        Titanium          & 17.0 & \SI{1.12e5} & \SI{2325e6} \ \\
        Silicon Dioxide   & 1.40 & \SI{1e-16} & \SI{2525e6} \ \\
        }
\end{table}    

\end{document}

答案1

我会谨慎地避免在这里进行过多的对齐:您有一系列不易比较的数字,因此任何对齐实际上都无助于理解这些值。我也不确定您为什么选择pgfplotstable,这可能在从外部来源读取数据时效果最好。

因此,我会选择使用lr列的简单表格,并使用\numfromsiunitx将指数输入自动转换为正确的形式。例如

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}

\begin{table}
  \sisetup{table-align-exponent = false}
  \begin{tabular}
    {
      @{}
      l
      >{$}r<{$}
      >{$}r<{$}
      >{$}r<{$}
      @{}
    }
    \toprule
      & \multicolumn{1}{c}{$k$ (\si{\watt\per\metre\per\kelvin})}
      & \multicolumn{1}{c}{$\sigma$ (\si{\per\ohm\per\metre})}
      & \multicolumn{1}{c@{}}{$C$ (\si{\joule\per\metre\squared\per\kelvin})} \\
    \midrule
    Amorph GST & 0.17 & 3 & 6 \\
    Crystalline GST & 0.5 & 2770 & 6 \\[1em]
    Aluminum & 25 & \num{37e6} & \num{2.15e6} \\
    Titanium & 17 & \num{1.12e5} & \num{2325e6} \\
    Silicon dioxide & 1.4 & \num{1e-16} & \num{2525e6} \\
    \bottomrule
  \end{tabular}
\end{table}

\end{document}

是我的方法,当然你也可以在问题中添加额外的格式。(和的作者一样booktabs,我更喜欢“轻量级”的表格格式。)

注意\SI需要参数:一个数字和一个单位。因此,您\si只需要单位和\num数字。问题示例中可能有一些杂散输入。

相关内容