下面的 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
,这可能在从外部来源读取数据时效果最好。
因此,我会选择使用l
和r
列的简单表格,并使用\num
fromsiunitx
将指数输入自动转换为正确的形式。例如
\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
数字。问题示例中可能有一些杂散输入。