beamer 上的 \arrayrulecolor 问题

beamer 上的 \arrayrulecolor 问题

我正在尝试在 beamer 上写入某个表格,但是命令 \arrayrulecolor 出现了问题,我无法理解......

这是文章文档类中的表格,我希望它看起来像这样。(有些人可能反对我使用水平和垂直规则的选择:但这只是问题的一个实际示例,我的真实表格有数百行,至少有十几列和许多多列和多行,我认为,和我讨论过表格的一些人也同意,规则有点帮助。)

在此处输入图片描述

代码如下。

\documentclass[9pt,dvipsnames,table]{article}
 \usepackage{xcolor}
\usepackage[utf8]{inputenc}
\linespread{1.5}
\usepackage{graphicx}
%\usetheme{Frankfurt}
\usepackage{amsbsy}         
\usepackage{amscd}          
\usepackage{amsfonts}
\usepackage{amsmath}        
\usepackage{amssymb}        
\usepackage{amstext}        
\usepackage{amsthm}
\usepackage{multicol}
\usepackage{multirow}       
\usepackage{tikz-cd}
\usepackage{colortbl}
\usepackage{hhline}

\begin{document}
%\begin{frame}{Title}
    \begin{table}[h]
    \centering
    \begin{tabular}{|c|c|c|}
    \hline
    Y & \cellcolor{red!15}  & Y \\\hhline{-*{1}{>{\arrayrulecolor{red!15}}|-}*{1}{>{\arrayrulecolor{black}}|-}}
   Y & \multirow{-2}{*}{\cellcolor{red!15}N}  & Y\\\hline
    \end{tabular}
    \end{table}
%\end{frame}
\end{document}

但是,当我尝试在 beamer 上使用完全相同的代码时,我得到了以下结果:请注意中间列中的白线,以及最后一列中没有黑线。

在此处输入图片描述

代码本质上是一样的,但我仍然将其发布在下面。

\documentclass[9pt,dvipsnames,table]{beamer}
 
\usepackage{xcolor}
\usepackage[utf8]{inputenc}
\linespread{1.5}
\usepackage{graphicx}
\usetheme{Frankfurt}
\usepackage{amsbsy}         
\usepackage{amscd}          
\usepackage{amsfonts}
\usepackage{amsmath}        
\usepackage{amssymb}        
\usepackage{amstext}        
\usepackage{amsthm}
\usepackage{multicol}
\usepackage{multirow}       
\usepackage{tikz-cd}
\usepackage{colortbl}
\usepackage{hhline}

\begin{document}
\begin{frame}{Title}
    \begin{table}[h]
    \centering
    \begin{tabular}{|c|c|c|}
    \hline
    Y & \cellcolor{red!15}  & Y \\\hhline{-*{1}{>{\arrayrulecolor{red!15}}|-}*{1}{>{\arrayrulecolor{black}}|-}}
   Y & \multirow{-2}{*}{\cellcolor{red!15}N}  & Y\\\hline
    \end{tabular}
    \end{table}
\end{frame}
\end{document}

说实话,我不知道问题出在哪里:我尝试在线搜索 beamer 和 \arrayrulecolor 之间相互作用中已知的错误,但一无所获。我也尝试切换软件包的顺序,但无济于事……我还删除了所有我能删除的软件包,上面的软件包对于我的文档工作来说是绝对必要的,但这也帮不上什么忙。

答案1

正如大卫·卡莱尔在这篇文章中所解释的那样问题,问题的根源是\unskipBeamer 在 LaTeX 命令定义中添加了\reset@color

如果您需要,这里有一个对 进行修改的补丁\HH@loop。该命令是 的命令,\hhline但它被 重新定义\colortbl。这就是我对该重新定义进行修改的原因。我只添加了 ,\kern\z@它将被 吞噬\unskip

\documentclass[9pt,dvipsnames,table]{beamer}
 \usepackage{xcolor}
\usepackage[utf8]{inputenc}
\linespread{1.5}
\usepackage{graphicx}
%\usetheme{Frankfurt}
\usepackage{amsbsy}         
\usepackage{amscd}          
\usepackage{amsfonts}
\usepackage{amsmath}        
\usepackage{amssymb}        
\usepackage{amstext}        
\usepackage{amsthm}
\usepackage{multicol}
\usepackage{multirow}       
\usepackage{tikz-cd}
\usepackage{colortbl}
\usepackage{hhline}

\begin{document}

\makeatletter

\def\HH@loop{%
  \ifx\@tempb`\def\next##1{\the\toks@\cr}\else\let\next\HH@let
  \ifx\@tempb|\if@tempswa
          \ifx\CT@drsc@\relax
           \HH@add{\hskip\doublerulesep}%
          \else
           \HH@add{{\CT@drsc@\vrule\@width\doublerulesep}}%
           \fi
          \fi\@tempswatrue
          \HH@add{{\CT@arc@\vline}}\else
  \ifx\@tempb:\if@tempswa
          \ifx\CT@drsc@\relax
           \HH@add{\hskip\doublerulesep}%
          \else
           \HH@add{{\CT@drsc@\vrule\@width\doublerulesep}}%
           \fi
              \fi\@tempswatrue
      \HH@add{\@tempc\HH@box\arrayrulewidth\arrayrulewidth\@tempc}\else
  \ifx\@tempb##\if@tempswa\HH@add{\hskip\doublerulesep}\fi\@tempswatrue
         \HH@add{{\CT@arc@\vline\copy\@ne\@tempc\vline}}\else
  \ifx\@tempb~\@tempswafalse
           \if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
              \ifx\CT@drsc@\relax
                \HH@add{\hfil}\else
                 \HH@add{{%
                   \CT@drsc@\leaders\hrule\@height\HH@height\hfil}}%
               \fi
                 \else
  \ifx\@tempb-\@tempswafalse
           \gdef\HH@height{\arrayrulewidth}%
           \if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
              \HH@add{{%
                \CT@arc@\leaders\hrule\@height\arrayrulewidth\hfil\kern\z@}}% \kern\z@ added
                           \else
  \ifx\@tempb=\@tempswafalse
       \gdef\HH@height{\dimen\thr@@}%
       \if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
       \HH@add
          {\rlap{\copy\@ne}\leaders\copy\@ne\hfil\llap{\copy\@ne}}\else
  \ifx\@tempb t\HH@add{%
    \def\HH@height{\dimen\thr@@}%
    \HH@box\doublerulesep\z@}\@tempswafalse\else
  \ifx\@tempb b\HH@add{%
    \def\HH@height{\dimen\thr@@}%
    \HH@box\z@\doublerulesep}\@tempswafalse\else
  \ifx\@tempb>\def\next##1##2{%
     \HH@add{%
      {\baselineskip\p@\relax
       ##2%
      \global\setbox\@ne\HH@box\doublerulesep\doublerulesep}}%
       \HH@let!}\else
  \ifx\@tempb\@sptoken\let\next\HH@spacelet\else
  \PackageWarning{hhline}%
      {\meaning\@tempb\space ignored in \noexpand\hhline argument%
       \MessageBreak}%
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
  \next}

\makeatother

\begin{frame}{Title}
    \begin{table}[h]
    \centering
    \begin{tabular}{|c|c|c|}
    \hline
    Y & \cellcolor{red!15}  & Y \\\hhline{-*{1}{>{\arrayrulecolor{red!15}}|-}*{1}{>{\arrayrulecolor{black}}|-}}
   Y & \multirow{-2}{*}{\cellcolor{red!15}N}  & Y\\\hline
    \end{tabular}
    \end{table}
\end{frame}
\end{document}

上述代码的输出

顺便说一句,我认为你的指令有错误\hhline

使用以下代码将获得更好的输出:

\hhline{-|*{1}{>{\arrayrulecolor{red!15}}-}*{1}{>{\arrayrulecolor{black}}|-}}

上述代码的输出

不过,我建议{NiceTabular}构建这样的表格。

\documentclass[9pt,dvipsnames]{beamer}
\usepackage{nicematrix}
\linespread{1.5}

\begin{document}

\begin{frame}{Title}

\begin{center}
\begin{NiceTabular}{ccc}[hvlines]
Y & \Block[fill=red!15]{2-1}{N} & Y \\
Y &                             & Y\\
\end{NiceTabular}
\end{center}
    
\end{frame}

\end{document}

上述代码的输出

如您所见,您将在 PDF 查看器中获得更好的输出。

答案2

欢迎来到 TeX.SE!正如 @samcarter_is_at_topanswers.xyz 所建议的,使用该tabularray包可以解决:

\documentclass[9pt,dvipsnames,table]{beamer}
\usetheme{Frankfurt}
\usepackage{tabularray}

\begin{document}
\begin{frame}{Title}
    \begin{table}[h]
    \centering
\begin{tblr}{hlines, vlines,
             colspec = {c Q[c] c}
             }
Y   &   \SetCell[r=2]{c,bg=red!15}    N
        &   Y   \\
Y   &   &   Y   \\
Z   & Z &   Z   \\
\end{tblr}
    \end{table}
\end{frame}

在此处输入图片描述

使用article文档类时您将获得相同的结果。

笔记:请注意,beamer 会加载一些包,如xcolor、等。graphicxamsmath

相关内容