给出一个表,其中因子从 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}\times
S
\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}
我注释掉了最后两行,因为这个序言在我的语言环境中没有定义ColorGold
和ColorSilber
。