我正在尝试使用tabularx
Latex 中的环境创建一个表格,其中包含各种不同颜色的 \cmidrule。但是,创建的线条不在同一条垂直线上(如下面的屏幕截图所示,代码在问题后面提供):
我找到了这个答案(https://tex.stackexchange.com/a/35821/301750) 为环境中的表格提供了令人满意的结果tabular
。但是,我必须使用\tabularx
才能使用我修改过的特殊列类型以及列宽(参见代码)。
% !TEX program = lualatex
\documentclass{article}
\usepackage[table]{xcolor} % For row coloring
\usepackage{tabularx} % For the tabularx environment
\usepackage{colortbl} % For coloring the rules
\usepackage{array} % For adjusting column widths
\usepackage{booktabs} % For better horizontal rules
% Vertical centering for 'X' type columns
\renewcommand\tabularxcolumn[1]{m{#1}}
% from https://tex.stackexchange.com/a/35821/301750
% Correct for \cmidrule colour adjustment/vertical skip
\newcommand{\corcmidrule}[1][2pt]{% \corcmidrule[<len>]
\\[\dimexpr-\normalbaselineskip-\belowrulesep-\aboverulesep-#1\relax]%
}
\begin{document}
\begin{tabular}{lll}
column 1 & column 2 & column 3 \\
\cmidrule[2pt](lr){1-1}\corcmidrule\arrayrulecolor{blue}%
\cmidrule[2pt](lr){2-2}\corcmidrule\arrayrulecolor{black}%
\cmidrule[2pt](lr){3-3}
text & text & text\\ \cmidrule[0.4pt](lr){1-1}\cmidrule[0.4pt](lr){2-2}\cmidrule[0.4pt](lr){3-3}
text & text & text\\ \cmidrule[0.4pt](lr){1-1}\cmidrule[0.4pt](lr){2-2}\cmidrule[0.4pt](lr){3-3}
\end{tabular}
\begin{table}[htbp]
\centering
\rowcolors{2}{white}{gray!5} % Alternate row colors
\footnotesize
\caption{Issue with vertical placement of cmidrule}
\begin{tabularx}{\linewidth}{
>{\hsize=1.1\hsize\centering}X
>{\hsize=0.8\hsize\centering}X
>{\hsize=1.2\hsize\centering}X
>{\hsize=1\hsize\centering}X
>{\hsize=1.3\hsize\centering}X
>{\hsize=0.7\hsize\centering}X
>{\hsize=1.4\hsize\centering}X
>{\hsize=1\hsize\centering}X
>{\hsize=0.5\hsize\centering}X
>{\hsize=0.8\hsize\centering}X
>{\hsize=1.2\hsize\centering\arraybackslash}X
}
\arrayrulecolor{gray}\toprule
col 1 & col 2 & col 3 & col 4 & col 5 & col 6 & col 7 & col 8 & col 9 & col 10 & col 11 \\
\arrayrulecolor{orange}\cmidrule(lr){1-1}\cmidrule(lr){3-3}\cmidrule(lr){4-4}\cmidrule(lr){7-7}
\arrayrulecolor{gray}\cmidrule(lr){2-2}\cmidrule(lr){5-5}\cmidrule(lr){6-6}\cmidrule(lr){8-8}
content 1 & content 2 & content 3 & content 4 & content 5 & content 6 & content 7 & content 8 & content 9 & content 10 & content 11 \\
\arrayrulecolor{gray}\bottomrule
\end{tabularx}
\end{table}
\end{document}
我认为问题在于定义中‘\\’的使用,\corcmidrule
但我完全不确定......
我知道代码没有tabularx
使用 显示表格\corcmidrule
,但它就是不起作用。\corcmidrule
在环境中使用显示所需的结果。我尝试使用而不是 来tabular
更改代码,但它没有解决问题。我必须同意,我真的不明白代码的作用,所以我在寻求帮助。\vspace
\\
提前致谢。
如果您无法运行代码:以下是两个结果表:
答案1
- 您的表格,即使您在表格中使用的
\footnotesize
字体大小大于默认article
大小\textwidth
。补救措施是通过使用geometry
包来扩大文本块大小。 - 使用该
tabularray
包编写第二个表很容易获得所需的结果。 - 除此之外,代码更短:
\documentclass{article}
%\usepackage{geometry}
\usepackage{xcolor} % For row coloring
\usepackage{tabularray} % For the tabularx environment
\UseTblrLibrary{booktabs} % For better horizontal rules
\begin{document}
\begin{table}[htbp]
\footnotesize
\caption{Issue with vertical placement of cmidrule}
\begin{tblr}{colspec = {*{11}{X[c,m]}},
colsep = 3pt,
row{even} = {gray!5}
}
\toprule[fg=gray]
col 1 & col 2 & col 3 & col 4 & col 5 &
col 6 & col 7 & col 8 & col 9 & col 10 &
col 11 \\
\cmidrule[lr, fg=orange]{1-1}
\cmidrule[lr, fg=gray]{3-3}
\cmidrule[lr, fg=orange]{4-4}
\cmidrule[lr, fg=orange]{7-7}
\cmidrule[lr, fg=gray]{2-2}
\cmidrule[lr, fg=gray]{5-5}
\cmidrule[lr, fg=orange]{6-6}
\cmidrule[lr, fg=gray]{8-8}
content 1 & content 2 & content 3 & content 4 & content 5 &
content 6 & content 7 & content 8 & content 9 & content 10 &
content 11 \\
\bottomrule[fg=gray]
\end{tblr}
\end{table}
\end{document}