我正在尝试制作一个本质上是特征矩阵的表格。条目被分组,每组都是一个句子的一组补全。由于空间限制,我试图将句子的开头和第一个补全保持在同一行,如下所示:
但是,我想添加行颜色以更好地区分组。我通过\hskip
在两部分之间添加 s 实现了将每个组标题中的文本推到侧面的效果...但是,正如评论中所述colortbl
,颜色无法到达单元格的末尾:
有没有办法实现这种效果组合,而又不出现难看的色彩差距,无论是通过调整与 colortbl 相关的代码,还是通过使用不同的机制来拆分组标题?(或者可能是完全不同的设计解决方案......)
梅威瑟:
\documentclass[12pt]{report}
\usepackage{colortbl,booktabs}
\usepackage{pifont}
\newcommand{\rowgrpheader}[2]{\textbf{#1\ldots} \hskip 5pt plus 1filll \ldots #2}
\newcommand{\xmark}{\ding{55}}
\newcommand{\cmark}{\ding{51}}
\begin{document}
\begin{tabular}{rcc}
\toprule
& \textbf{Broke a chain} & \textbf{Freed a human soul} \\ \midrule
\rowcolor[gray]{.85} \rowgrpheader{Loyalty to}{a petrified opinion} & \xmark & \xmark \\
\rowcolor[gray]{.85} \ldots principled open-mindedness & \cmark & \cmark \\
\rowgrpheader{Telling other people to}{shut up} & \xmark & \xmark \\
\ldots be their best selves & \cmark & \cmark \\
\bottomrule
\end{tabular}
\end{document}
答案1
tabularx
以下是使用(和makecell
,以便更好地观察)的方法:
\documentclass[12pt]{report}
\usepackage[showframe]{geometry}
\usepackage[table, svgnames]{xcolor}
\usepackage{booktabs, tabularx, makecell, bigstrut}
\usepackage{pifont}
\renewcommand{\theadfont}{\normalsize\bfseries}
\newcommand{\rowgrpheader}[2]{\textbf{#1\ldots} \hskip 5pt plus 1filll \ldots #2}
\newcommand{\xmark}{\ding{55}}
\newcommand{\cmark}{\ding{51}}
\begin{document}
\noindent\begin{tabularx}{\linewidth}{ >{\raggedleft}Xcc}
\toprule
& \thead{Broke a chain} & \thead{Freed a\\ human soul} \\
\specialrule{\lightrulewidth}{0pt}{0pt}
\rowcolor{Gainsboro!70} \rowgrpheader{Loyalty to}{a petrified opinion} & \xmark & \xmark\bigstrut[t] \\
\rowcolor{Gainsboro!70} \ldots principled open-mindedness & \cmark & \cmark \\
\rowgrpheader{Telling other people to}{shut up} & \xmark & \xmark \\
\ldots be their best selves & \cmark & \cmark \\
\bottomrule
\end{tabularx}
\end{document}
答案2
您只需对第一列使用固定宽度的列类型(如p
或 )即可消除白色间隙。m
由于表格超出了文本宽度,我已添加tabularx
并调整了第二列和第三列的宽度。
\documentclass[12pt]{report}
\usepackage{colortbl,booktabs}
\usepackage{pifont}
\usepackage{tabularx}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcommand{\xmark}{\ding{55}}
\newcommand{\cmark}{\ding{51}}
\begin{document}
\begin{tabularx}{\textwidth}{XC{2cm}C{2.5cm}}
\toprule
& \textbf{Broke a chain} & \textbf{Freed a human soul} \\ \midrule
\rowcolor[gray]{.85} \textbf{Loyalty to \ldots} \hfill \ldots a petrified solution & \xmark & \xmark \\
\rowcolor[gray]{.85} \raggedleft \ldots principled open-mindedness & \cmark & \cmark \\
\textbf{Telling other people to \ldots} \hfill \ldots shut up & \xmark & \xmark \\
\raggedleft \ldots be their best selves & \cmark & \cmark \\
\bottomrule
\end{tabularx}
\end{document}
答案3
这是一个{NiceTabular}
使用 的解决方案nicematrix
。
- 我已经加载
nicematrix
(并卸载colortbl
)。 - 我已
{tabular}
用{NiceTabular}
密钥替换colortbl-like
替换了。
输出直接是预期的输出(因为在中nicematrix
,颜色指令用 PGF/Tikz 处理)。
\documentclass[12pt]{report}
\usepackage{booktabs}
\usepackage{pifont}
\newcommand{\rowgrpheader}[2]{\textbf{#1\ldots} \hskip 5pt plus 1filll \ldots #2}
\newcommand{\xmark}{\ding{55}}
\newcommand{\cmark}{\ding{51}}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}{rcc}[colortbl-like]
\toprule
& \textbf{Broke a chain} & \textbf{Freed a human soul} \\ \midrule
\rowcolor[gray]{.85} \rowgrpheader{Loyalty to}{a petrified opinion} & \xmark & \xmark \\
\rowcolor[gray]{.85} \ldots principled open-mindedness & \cmark & \cmark \\
\rowgrpheader{Telling other people to}{shut up} & \xmark & \xmark \\
\ldots be their best selves & \cmark & \cmark \\
\bottomrule
\end{NiceTabular}
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。