tabularx+xcolor \rowcolor 超出页面宽度

tabularx+xcolor \rowcolor 超出页面宽度

编辑:我正在使用这个模板:PoPET(科学).这对于失败来说很重要。

下面是一些简单的代码来演示哪些使用了上述模板中的 dgruyter_NEW 包:

\documentclass[USenglish,oneside,twocolumn]{article}
\usepackage[big]{dgruyter_NEW}
\usepackage{pifont}
\usepackage{amsfonts}
\usepackage[table]{xcolor}
\usepackage{booktabs,array}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}
\definecolor{tableheadcolor}{gray}{0.92}

\begin{document}
\begin{table*}[t]
\begin{tabularx}{\linewidth}{l}
    \rowcolor{tableheadcolor} A \\
\end{tabularx}
\end{table*}
\end{document}

结果:

作为参考,我使用这个模板:PoPET(科学)。 有任何想法吗?

答案1

(我的回答给出了同样的建议@shaananc 的回答,但有一个完整的例子并附带一些解释。)

dgruyter_NEW.sty修补了许多内部宏,包括\@array。正如@shaananc 指出的那样,\expandafter\ifx\d@llarbegin\begingroup\hskip-\col@sep\fi在的定义中添加了两个\@preamble,据我所知,这用于删除表格中第一列之前和最后一列之后的空格。似乎这个更改与不兼容\rowcolor

在下面的例子中,从的定义中删除了这两行\@array(通过\xpatchcmdfromxpatch命令),并给出了表格示例来说明发生了哪些变化以及如何dgruyter_NEW.sty手动恢复的效果。

\documentclass[USenglish,oneside,twocolumn]{article}
\usepackage[big]{dgruyter_NEW}
\usepackage{pifont}
\usepackage{amsfonts}
\usepackage[table]{xcolor}
\usepackage{booktabs,array}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}
\definecolor{tableheadcolor}{gray}{0.92}

\usepackage{xpatch}
\makeatletter
\xpatchcmd\@array
  {\expandafter\ifx\d@llarbegin\begingroup\hskip-\col@sep\fi}
  {}
  {}{\fail}
\xpatchcmd\@array
  {\expandafter\ifx\d@llarbegin\begingroup\hskip-\col@sep\fi}
  {}
  {}{\fail}
\makeatother

\begin{document}

\subsection*{With \texttt{\string\rowcolor}}
\begin{tabularx}{\linewidth}{c}
  \rowcolor{tableheadcolor} A \\
  B \\
  C \\
\end{tabularx}

\subsection*{Without \texttt{\string\rowcolor}}
\begin{tabular}{c}
  A \\
  B \\
  C \\
\end{tabular}\smallskip

Note the space of width \verb|\tabcolsep| is inserted before first column and after last column by default (again).

\subsection*{Without \texttt{\string\rowcolor}, use \texttt{@\{\}} to remove  that space}
\begin{tabular}{@{}c@{}}
  A \\
  B \\
  C \\
\end{tabular}\smallskip

Note this emulates the original effect of \verb|dgruyter_NEW.sty|.

\end{document}

在此处输入图片描述

答案2

模板中的这段代码导致了以下问题:

\def\@array[#1]#2{%
  \@tempdima \ht \strutbox
  \advance \@tempdima by\extrarowheight
  \setbox \@arstrutbox \hbox{\vrule
             \@height \arraystretch \@tempdima
             \@depth \arraystretch \dp \strutbox
             \@width \z@}%
  \begingroup
  \@mkpream{#2}%
  \xdef\@preamble{\noexpand \ialign \@halignto
                  \bgroup
                    \expandafter\ifx\d@llarbegin\begingroup\hskip-\col@sep\fi
                    \@arstrut \@preamble
                    \expandafter\ifx\d@llarbegin\begingroup\hskip-\col@sep\fi
                          \tabskip \z@ \cr}%
  \endgroup
  \@arrayleft
  \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
  \bgroup
  \let \@sharp ##\let \protect \relax
  \lineskip \z@
  \baselineskip \z@
  \m@th
  \let\\\@arraycr \let\tabularnewline\\\let\par\@empty \@preamble}

它用于修改模板的框大小,但我不知道该如何解释确切的问题或提供解决方案。

编辑:我怀疑这里的长度不应该是这样的\expandafter\ifx\d@llarbegin\begingroup\hskip-\col@sep\fi

相关内容