使用 xcolor,我怎样才能只为某一行的子集而不是整行着色?

使用 xcolor,我怎样才能只为某一行的子集而不是整行着色?

我正在使用xcolor带有表格选项的包来为表格的每隔一行着色(非常好的指导这里)。这只需要一行,而且通常很棒。但是,在我的论文中,我多次发现自己只想为行的子集着色(例如,不为前 N 列着色)。(在下面的例子中,它遮住了垂直设置的单词。)有没有办法使用此包(或具有类似复杂性的另一个包)来做到这一点,希望 tikz 表不是唯一的答案?

整行交替颜色不是我想要的示例

梅威瑟:

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{booktabs,multirow,graphicx}
\definecolor{lightgray}{gray}{0.94}
\begin{document}
\begin{table}
  \begin{tabular}{clr}
    \toprule
    Alg. & Dataset & Result \\
    \midrule
    \parbox[t]{2mm}{\multirow{4}{*}{\rotatebox[origin=c]{90}{BFS}}}
         & soc-ork & 1.61\\
         & soc-lj  & 2.95\\
         & h09     & 1.60\\
         & i04     & 14.72\\
    \bottomrule
  \end{tabular}

  \rowcolors{2}{lightgray}{white}
  \begin{tabular}{clr}
    \toprule
    Alg. & Dataset & Result \\
    \midrule
    \parbox[t]{2mm}{\multirow{4}{*}{\rotatebox[origin=c]{90}{BFS}}}
         & soc-ork & 1.61\\
         & soc-lj  & 2.95\\
         & h09     & 1.60\\
         & i04     & 14.72\\
    \bottomrule
  \end{tabular}
\end{table}
\end{document}

答案1

{NiceTabular}使用of nicematrix(最新版本:2021-01-01 的 5.8)可以轻松做到这一点。

\documentclass{article}
\usepackage{xcolor}
\usepackage{booktabs,graphicx}
\usepackage{nicematrix}
\definecolor{lightgray}{gray}{0.94}

\begin{document}
\begin{table}
  \begin{NiceTabular}{clr}[code-before = {\rowcolors{2}{lightgray}{}[cols=2-]} ]
    \toprule
    Alg. & Dataset & Result \\
    \midrule
    \Block{4-1}{\rotate BFS}
         & soc-ork & 1.61 \\
         & soc-lj  & 2.95 \\
         & h09     & 1.60 \\
         & i04     & 14.72\\
    \bottomrule
  \end{NiceTabular}
\end{table}
\end{document}

您需要多次编译(因为nicematrix使用 PGF/Tikz 节点)。

上述代码的输出

答案2

在此处输入图片描述

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{booktabs,multirow,graphicx}
\definecolor{lightgray}{gray}{0.94}
\begin{document}
\begin{table}
  \begin{tabular}{clr}
    \toprule
    Alg. & Dataset & Result \\
    \midrule
    \multirow{4}{*}{\rotatebox[origin=c]{90}{BFS}}
         & soc-ork & 1.61\\
         & soc-lj  & 2.95\\
         & h09     & 1.60\\
         & i04     & 14.72\\
    \bottomrule
  \end{tabular}

  \rowcolors{2}{lightgray}{white}
  \begin{tabular}{clr}
    \toprule
    Alg. & Dataset & Result \\
    \midrule
%    \multirow{7}{*}{\rotatebox[origin=c]{90}{BFS}}
         & soc-ork & 1.61\\
         & soc-lj  & 2.95\\
         & h09     & 1.60\\
      \multirow{-4}{*}{\rotatebox[origin=c]{90}{BFS}}   
         & i04     & 14.72\\
    \bottomrule
  \end{tabular}
\end{table}
\end{document}

编辑

在此处输入图片描述

\newcommand\ccg[1]{\cellcolor{white}{#1}} % for cells in second column 

    \rowcolors{2}{lightgray}{white}
  \begin{tabular}{clr}                      \toprule
        Alg.    & Dataset   & Result    \\  \midrule
                & soc-ork   & 1.61      \\
     \ccg{}     & soc-lj    & 2.95      \\
                & h09       & 1.60      \\
      \multirow{-4.5}{*}{\rotatebox[origin=c]{90}{BFS}}   
     \ccg{}     & i04       & 14.72     \\  \bottomrule
  \end{tabular}

注意在多行中使用小数进行精细控制

答案3

我将提供第三种方法来解决这个问题,更适合现实世界的情况。

我主要使用中型数字表,可能有 40 到 60 行,15 到 25 列,有些只有文本。有些数据是手动输入的,严格遵循“一次性”规则: 同一数据仅一次允许在此过程中手动输入。

大多数情况下,表格是在电子表格中生成的,或者从统计包或数据库导入的。其他列经过计算、重新排序,单元格突出显示以与合作者共享结果等。有些列将是内部一致性检查或永远不会公开的评论。

使用 LaTeX 进行高质量排版是一项漫长工作的最后一步。只有表格的子集会被发布。

你绝对想不到直接在 LaTeX 代码中输入数据。这太容易出错,而且违反了“一次性”规则。

我发现的最佳替代方案是 excel2latex 插件。 https://ctan.org/tex-archive/support/excel2latex?lang=en

一旦与同事和老板就最终的发布格式达成一致,就很容易获得(几乎)最终的代码。所有数字和文本数据都将无错误地导出。有时您可能需要添加收尾工作,例如将数字数据与小数点对齐,包括另一个包等。

例如,为了生成示例代码,我花了 10 分钟来创建 Excel 表,花了 15 秒来导出代码并包含package rotating.

原始表 导出表

如您所见,自动生成的代码与其他答案中提出的代码略有不同,但它非常简单,易于编辑,最终结果几乎相同。 (您可以尝试使用和不使用 booktab 选项)。

\documentclass{article}

\usepackage[table]{xcolor}
\usepackage{booktabs,multirow}

\usepackage{rotating}

\begin{document}

% Table generated by Excel2LaTeX from sheet 'Sheet1'
\begin{table}[htbp]
    \centering
    \caption{Add caption}
    \begin{tabular}{clr}
        \toprule
        Alg.  & Dataset & Result \\
        \midrule
        \multirow{4}[2]{*}{\begin{sideways}BFS\end{sideways}} & soc-ork  & 1.61 \\
        & \cellcolor[rgb]{ .816,  .808,  .808}soc-lj & \cellcolor[rgb]{ .816,  .808,  .808}2.95 \\
        & h09   & 1.60 \\
        & \cellcolor[rgb]{ .816,  .808,  .808}i04 & \cellcolor[rgb]{ .816,  .808,  .808}14.72 \\
        \bottomrule
    \end{tabular}%
    \label{tab:addlabel}%
\end{table}%


\end{document}

输出

在我参与的上一份报告中,项目经理在查看打印的草稿时,决定某一列应按升序而不是降序排序。只需几分钟即可完成该任务,而不需要花一天或更长时间在 LaTeX 代码中手动输入所有数据并在输出时检查每个数字。

我探索了几种替代工具。参见

简化 LaTeX 表格生成的工具综合列表

其中一些是在线的。一个有希望的新网站是https://www.latex-tables.com

它可以导入 Excel 文件和其他格式,在某些情况下很有用。

目前我将坚持使用 excel2latex,因为我的表格工作流程的核心是在 excel 中完成的。

相关内容