这是带有 S 列类型的表格siunitx
。我希望斜体值(带有 的命令swapshift
)仍然位于小数点中央。上标可以是可变的,但几乎总是只是“a”或“b”,也许是“c”,长度永远不会超过 1 个字母。
\documentclass{memoir}
\usepackage{siunitx}
\usepackage{multirow}
\sisetup{inter-unit-product={}\cdot{},sticky-per=true,multi-part-units=single,separate-uncertainty=true,list-units=single,range-units=single,detect-all,detect-weight=true,detect-inline-weight=math}
\usepackage{etoolbox}
\newcommand{\thirteenc}{\textsuperscript{13}C}
\newcommand{\oneh}{\textsuperscript{1}H}
\robustify\bfseries
\usepackage{bpchem}
\usepackage[tracking=bpchem]{chemstyle}
\setcounter{BPCno}{200}
\newcommand{\mcol}[3]{\multicolumn{#1}{#2}{#3}}
\newcommand{\mrow}[3]{\multirow{#1}{#2}{#3}}
\newcommand{\onemultcol}[2]{\mcol{1}{#1}{#2}}
\newcolumntype{g}{>{\rule{1.2em}{0em}}r@{ }l}
\newcommand{\greek}[1]{$#1$}
\newcommand{\range}[1]{\mcol{1}{c}{\bfseries #1}}
\newcommand{\swapshift}[2]{\mcol{1}{c}{\textit{#1}\textsuperscript{#2}}}
\newenvironment{onehTable}[2]{%
\begin{tabular}{gS[table-format=1.2]S[table-format=1.2]S[table-format=1.2]S[table-format=1.2]} \toprule%
\mcol{2}{c}{\mrow{2}{*}{Position}} & \mcol{2}{c}{Computed} & \mcol{2}{c}{Experimental} \\%
& & \mcol{1}{c}{\textbf{#1}} & \mcol{1}{c}{\textbf{#2}} & \mcol{1}{c}{\textbf{#1}} & \mcol{1}{c}{\textbf{#2}} \\%
\cmidrule[\lightrulewidth](r){1-2} \cmidrule[\lightrulewidth](lr){3-4} \cmidrule[\lightrulewidth](l){5-6}}%
{\end{tabular}}
\begin{document}
\CNlabelsubnoref{carvomenthone}{cis}
\CNlabelsubnoref{carvomenthone}{trans}
\begin{table}
\centering
\caption{Calculated and Experimental \oneh{} Shifts (in ppm) for carvomenthones \CNref{carvomenthone}}\label{tab:SI:carvomenthone1H}
\begin{onehTable}{\CNrefsub{carvomenthone}{cis}}{\CNrefsub{carvomenthone}{trans}}
2 & & 2.47 & 2.48 & 2.45 & 2.33 \\
3 & \greek{\alpha} & 1.87 & 1.29 & \swapshift{1.87}{a} & 1.30 \\
3 & \greek{\beta} & 1.70 & 2.12 & \range{1.60--1.75} & 2.10 \\
10 & Me & 1.06 & 0.92 & 1.10 & \swapshift{1.01}{b} \\ \bottomrule
\end{onehTable}
\end{table}
\end{document}
答案1
简化一下你的例子,我想你想要类似的东西
\documentclass{article}
\usepackage{booktabs,etoolbox,multirow,siunitx}
\robustify\itshape
\begin{document}
\begin{table}
\sisetup{table-format = 1.2, detect-all}
\begin{tabular}
{
>{\rule{1.2em}{0em}}
r@{ }
l
S
S
S[table-space-text-post = \textsuperscript{a}]
S[table-space-text-post = \textsuperscript{b}]
}
\toprule
\multicolumn{2}{c}{\multirow{2}{*}{Position}} &
\multicolumn{2}{c}{Computed} &
\multicolumn{2}{c}{Experimental} \\
& &
{\textbf{201a}} & {\textbf{201b}} & {\textbf{201a}} & {\textbf{201b}} \\
\cmidrule[\lightrulewidth](r){1-2}
\cmidrule[\lightrulewidth](lr){3-4}
\cmidrule[\lightrulewidth](l){5-6}
2 & & 2.47 & 2.48 & 2.45 & 2.33 \\
3 & $\alpha$ & 1.87 & 1.29 & \itshape 1.87{\textsuperscript{a}} & 1.30 \\
3 & $\beta$ & 1.70 & 2.12 & {\bfseries 1.60--1.75} & 2.10 \\
10 & Me & 1.06 & 0.92 & 1.10 &
\itshape 1.01{\textsuperscript{b}} \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
这里的关键是使用 来\itshape
改变格式,同时保留siunitx
S
列对齐,再加上使用 来设置上标的空间table-space-text-post
。
我也减少了使用 的次数\multicolumn
,这样{...}
可以更清楚地表示出 的意思siunitx
。siunitx
将括号内的任何内容视为“文本”,例如
& {\bfseries 1.60--1.75} &
排版材料而不解析数字:'文本'的对齐由键控制table-text-alignment
。(您也可以使用\multicolumn
和\tablenum
,但这在这里似乎过于复杂。)
该table-space-text-post
设置保留了数字后附加材料的“一些空间”。排版时,它需要足够宽,以容纳列中文本后的最大项目。通常,这只是选择具有代表性的东西的情况,但如果字体中的字母宽度变化很大,那么这可能是一个问题。我使用了上标a
和,b
因为它们是这些列中唯一的东西:我想如果你有一个m
或w
要放进去,你需要使用它们,因为它们更宽!