`siunitx` 的 S 列前面的字体颜色不起作用

`siunitx` 的 S 列前面的字体颜色不起作用

给出一个表,其中因子从 x1 到 x1000000000,然后第四列是 x0.1 和 x0.01。

siunitx 的 S 列负责对齐。

然而,出乎意料的是,S 列的字体颜色不再起作用。您可以在黑色背景的行中看到这一点,其中 x1 的颜色不是所需的白色。当然这只是一件小事,但我之前尝试改变它的所有尝试都失败了。

我检查但这没有帮助。我要感谢@koleygr 部分解决了我的问题。

为什么会这样?如何修复?

\documentclass[varwidth, margin=10pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{colortbl, siunitx, tabularx, booktabs, xcolor}
\begin{document}
\newsavebox\saveboxTimes
\savebox{\saveboxTimes}{$\times\,$}
\begin{tabular}{lcc>{\usebox{\saveboxTimes}}S[table-format={\usebox{\saveboxTimes}11.2},table-align-text-before=false]}
\toprule 
Farbe & 1. Ring & 2. Ring & \multicolumn{1}{c}{{3. Ring}}\tabularnewline
\midrule
\rowcolor{black!60}\color{white}schwarz & \color{white}0 & \color{white}0 & \color{white}1\tabularnewline
\rowcolor{brown!50}braun & 1 & 1 & 10\tabularnewline
\rowcolor{red!50}rot & 2 & 2 & 100\tabularnewline
\rowcolor{orange!50}orange & 3 & 3 & 1000\tabularnewline
\rowcolor{yellow!50}gelb & 4 & 4 & 10000\tabularnewline
\rowcolor{green!30}grün & 5 & 5 & 100000\tabularnewline
\rowcolor{blue!40}blau & 6 & 6 & 1000000\tabularnewline
\rowcolor{violet!30}violett & 7 & 7 & 10000000\tabularnewline
\rowcolor{gray!30}grau & 8 & 8 & 100000000\tabularnewline
\rowcolor{white}weiß & 9 & 9 & 1000000000\tabularnewline
\rowcolor{ColorGold}gold & - & - & 0.1\tabularnewline
\rowcolor{ColorSilber}silber & - & - & 0.01\tabularnewline
\bottomrule
\end{tabular}% 

在此处输入图片描述

答案1

切换到tabularx更具适应性的版本tabularray可以巧妙地解决问题。转换后的代码为:

\documentclass[varwidth, margin=10pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\usepackage{tabularray}
\UseTblrLibrary{siunitx,booktabs}
\usepackage[table]{xcolor}

\begin{document}

    \begin{talltblr}[
        caption = Widerstand Farbcodes
        ]{
            colspec = {lcc Q[si={table-format=13.2, table-align-text-before=false},c]},
            cell{2-Z}{4} = {preto=$\times$\space},
            row{1} = {guard},
            row{2} = {bg=black!60, fg=white},
            row{3} = {brown!50},
            row{4} = {red!50},
            row{5} = {orange!50},
            row{6} = {yellow!50},
            row{7} = {green!30},
            row{8} = {blue!40},
            row{9} = {violet!30},
            row{10} = {gray!30},
            row{11} = {white},
%           row{12} = {ColorGold},
%           row{13} = {ColorSilber},
            hline{1,2,Z} = {1pt}
        }
    Farbe   &   1. Ring &   2. Ring &   3. Ring     \\
    schwarz &   0       &   0       &   1           \\
    braun   &   1       &   1       &   10          \\
    rot     &   2       &   2       &   100         \\
    orange  &   3       &   3       &   1000        \\
    gelb    &   4       &   4       &   10000       \\
    grün    &   5       &   5       &   100000      \\
    blau    &   6       &   6       &   1000000     \\
    violett &   7       &   7       &   10000000    \\
    grau    &   8       &   8       &   100000000   \\
    weiß    &   9       &   9       &   1000000000  \\
    gold    &   -       &   -       &   0.1         \\
    silber  &   -       &   -       &   0.01        \\
\end{talltblr}% 

\end{document}

笔记: 不幸的是,ColorGold 和 ColorSilber 颜色产生了错误(无法识别),因此这些颜色在各自的行描述中被注释掉。

电阻值

答案2

首先,我认为您的代码存在一个问题,即您将 放在 里面$\times$\savebox这实际上阻止了内容受到\color此框外设置的影响。因此,我建议您在这种情况下不要使用这样的框。

我不完全理解为什么颜色会变坏。不知何故,如果这不是单元格中应该格式化的数字前唯一的东西,那么siunitx包似乎无法处理命令。如果你在类型单元格中的数字前面放置类似的东西,那么只有数字前面的东西会受到设置的影响,而不会影响格式化的数字。\color\color{white}\timesS\color

比较以下 MWE:

\documentclass[margin=10pt]{standalone}
\usepackage{xcolor, siunitx}
\begin{document}
\begin{tabular}{
    S[table-format={{\times}2.2}]
}
\color{red} 99.99 \\
\color{red}\times 99.99 \\
\end{tabular}% 
\end{document}

在此处输入图片描述

但是,可以使用选项color来设置格式化数字的颜色。您只需要在S类型单元格之前的一个单元格中设置正确的值即可。例如:

\documentclass[margin=10pt]{standalone}
\usepackage{colortbl, siunitx, booktabs, xcolor}

\def\Scolcolor{black}

\begin{document}
\begin{tabular}{
    l c c 
    >{\color{\Scolcolor}\times\,}S[
        table-format={{\times\,}11.2}, 
        table-align-text-before=false, 
        color=\Scolcolor
    ]
}
\toprule 
Farbe & 1. Ring & 2. Ring & \multicolumn{1}{c}{{3. Ring}}\tabularnewline
\midrule
\rowcolor{black!60}\gdef\Scolcolor{white}%
    \color{white}schwarz & \color{white}0 & \color{white}0 & 1\tabularnewline
\rowcolor{brown!50}\gdef\Scolcolor{black}%
    braun  & 1 & 1 & 10\tabularnewline
\rowcolor{red!50}rot & 2 & 2 & 100\tabularnewline
\rowcolor{orange!50}orange & 3 & 3 & 1000\tabularnewline
\rowcolor{yellow!50}gelb & 4 & 4 & 10000\tabularnewline
\rowcolor{green!30}grün & 5 & 5 & 100000\tabularnewline
\rowcolor{blue!40}blau & 6 & 6 & 1000000\tabularnewline
\rowcolor{violet!30}violett & 7 & 7 & 10000000\tabularnewline
\rowcolor{gray!30}grau & 8 & 8 & 100000000\tabularnewline
\rowcolor{white}weiß & 9 & 9 & 1000000000\tabularnewline
\rowcolor{yellow!10}gold & - & - & 0.1\tabularnewline
\rowcolor{gray!10}silber & - & - & 0.01\tabularnewline
\bottomrule
\end{tabular}% 
\end{document}

在此处输入图片描述


如果您不必使用常规的tabular,您也可以尝试nicematrix包装(但是,在这里,您也需要拆箱\times才能使其正常工作):

\documentclass[margin=10pt]{standalone}
\usepackage{nicematrix, booktabs, siunitx}

\begin{document}
\NewDocumentCommand{\timesprefix}{}{%
    \ensuremath\times\,%
}
\begin{NiceTabular}{
    l c c 
    >{\timesprefix}S[table-format={{\timesprefix}11.2}, table-align-text-before=false]
}
\CodeBefore
    \rowcolor{black!60}{2}
    \rowcolor{brown!50}{3}
    \rowcolor{red!50}{4}
    \rowcolor{orange!50}{5}
    \rowcolor{yellow!50}{6}
    \rowcolor{green!30}{7}
    \rowcolor{blue!40}{8}
    \rowcolor{violet!30}{9}
    \rowcolor{gray!30}{10}
    \rowcolor{white}{11}
    \rowcolor{yellow!10}{12}
    \rowcolor{gray!10}{13}
\Body
\toprule 
Farbe & 1. Ring & 2. Ring & \multicolumn{1}{c}{{3. Ring}}\tabularnewline
\midrule
\RowStyle[color=white]{}
schwarz & 0 & 0 & 1 \\
braun & 1 & 1 & 10 \\
rot & 2 & 2 & 100 \\
orange & 3 & 3 & 1000 \\
gelb & 4 & 4 & 10000 \\
grün & 5 & 5 & 100000 \\
blau & 6 & 6 & 1000000 \\
violett & 7 & 7 & 10000000 \\
grau & 8 & 8 & 100000000 \\
weiß & 9 & 9 & 1000000000 \\
gold & - & - & 0.1 \\
silber & - & - & 0.01 \\
\bottomrule
\end{NiceTabular}% 
\end{document}

在此处输入图片描述

其他一些提供宏来设置整行文本颜色的包也可能有用。

答案3

使用\multicolumn重新定义该单元格的列类型。

\documentclass[varwidth, margin=10pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{colortbl, siunitx, tabularx, booktabs, xcolor}
\begin{document}
\newsavebox\saveboxTimes
\savebox{\saveboxTimes}{$\times\,$}
\begin{tabular}{lcc>{\usebox{\saveboxTimes}}S[table-format={\usebox{\saveboxTimes}11.2},table-align-text-before=false]}
\toprule 
Farbe & 1. Ring & 2. Ring & \multicolumn{1}{c}{{3. Ring}}\tabularnewline
\midrule
\rowcolor{black!60}\color{white}schwarz & \color{white}0 & \color{white}0 &
% HERE ARE THE CHANGES
\multicolumn{1}{S[table-format={{$\times\,$}11.2},table-align-text-before=false,color=white]}{\textcolor{white}{$\times\,$}1}%
% END OF CHANGES
\tabularnewline
\rowcolor{brown!50}braun & 1 & 1 & 10\tabularnewline
\rowcolor{red!50}rot & 2 & 2 & 100\tabularnewline
\rowcolor{orange!50}orange & 3 & 3 & 1000\tabularnewline
\rowcolor{yellow!50}gelb & 4 & 4 & 10000\tabularnewline
\rowcolor{green!30}grün & 5 & 5 & 100000\tabularnewline
\rowcolor{blue!40}blau & 6 & 6 & 1000000\tabularnewline
\rowcolor{violet!30}violett & 7 & 7 & 10000000\tabularnewline
\rowcolor{gray!30}grau & 8 & 8 & 100000000\tabularnewline
\rowcolor{white}weiß & 9 & 9 & 1000000000\tabularnewline
%\rowcolor{ColorGold}gold & - & - & 0.1\tabularnewline
%\rowcolor{ColorSilber}silber & - & - & 0.01\tabularnewline
\bottomrule
\end{tabular}% 
\end{document}

我注释掉了最后两行,因为这个序言在我的语言环境中没有定义ColorGoldColorSilber

带有 S 列和特殊单元格的彩色表格

相关内容