在 siunitx S 列中居中对齐斜体数字

在 siunitx S 列中居中对齐斜体数字

这是带有 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,这样{...}可以更清楚地表示出 的意思siunitxsiunitx将括号内的任何内容视为“文本”,例如

& {\bfseries 1.60--1.75} &

排版材料而不解析数字:'文本'的对齐由键控制table-text-alignment。(您也可以使用\multicolumn\tablenum,但这在这里似乎过于复杂。)

table-space-text-post设置保留了数字后附加材料的“一些空间”。排版时,它需要足够宽,以容纳列中文本后的最大项目。通常,这只是选择具有代表性的东西的情况,但如果字体中的字母宽度变化很大,那么这可能是一个问题。我使用了上标a和,b因为它们是这些列中唯一的东西:我想如果你有一个mw要放进去,你需要使用它们,因为它们更宽!

相关内容