考虑以下代码(平均能量损失):
\documentclass{article}
\usepackage[table]{xcolor}% http://ctan.org/pkg/xcolor
\begin{document}
\begin{tabular}{|l|c|r|}
\hline
Some & \cellcolor{blue!25}coloured & contents \\
\hline
\multicolumn{2}{|c|}{\cellcolor{blue!25} multicolumn coloured} & \cellcolor{blue!6} other color \\ \hline
Some & \cellcolor{blue!15}coloured & contents \\
\hline
\end{tabular}
\end{document}
我在显示表格线时遇到了问题,正如您在以下图片中看到的那样。
使用 Evince (LINUX):
到目前为止没有问题。
使用 Adobe(WINDOWS):
如您所见,线条没有正确显示。
我该如何修复这个问题?我希望我的文档无论在什么操作系统上都可以显示。
注意事项:
- 我尝试遵循此帖子建议关联,但不幸的是,它并没有解决问题。
- 我在 Linux 上使用 pdflatex 进行编译,版本 3.1415926-2.5-1.40.14(TeX Live 2013/Debian)
- 正如您在下面看到的,这与没有多列的问题是一样的:
答案1
一个相当粗暴的解决方法是设置表格两次,第二次不设置背景颜色。也可以通过设置来增加规则厚度\arrayrulewidth
:
\documentclass{article}
\usepackage{array}
\usepackage[table]{xcolor}% http://ctan.org/pkg/xcolor
\begin{document}
\setlength{\arrayrulewidth}{1.5\arrayrulewidth}% 50% thicker
\def\tmp{%
\begin{tabular}{|l|c|r|}
\hline
Some & \cellcolor{blue!25}coloured & contents \\
\hline
\multicolumn{2}{|c|}{\cellcolor{blue!25}multicolumn coloured} &
\cellcolor{blue!6}other color \\ \hline
Some & \cellcolor{blue!15}coloured & contents \\
\hline
\end{tabular}%
}
\leavevmode
\rlap{\tmp}%
\begingroup
\renewcommand*{\cellcolor}[1]{}%
\tmp
\endgroup
\end{document}
评论:
- LaTeX 会删除单元格开头和结尾的空格。但是空格后
\cellcolor{...}
在细胞内,并且不是自动删除。
自动化
该过程可以在一定程度上实现自动化。以下示例至少支持列类型l
、c
、r
、p
、m
。b
内部被重新定义为捕获框中的单元格内容并将其替换为相同尺寸的空框。
@{...}
不支持的是、 、里面的文本longtable
...
\documentclass{article}
\usepackage{array}
\usepackage[table]{xcolor}% http://ctan.org/pkg/xcolor
\makeatletter
\let\org@insert@column\insert@column
\newcommand*{\dummy@insert@column@h}{%
\begingroup
\setbox0=\hbox\bgroup\begingroup
\org@insert@column
\endgroup\egroup
\setbox2=\hbox{}%
\wd2=\wd0 %
\ht2=\ht0 %
\dp2=\dp0 %
\copy2 %
\endgroup
}
\newcommand*{\dummy@endpbox}{%
\@finalstrut\@arstrutbox
\egroup
\begingroup
\setbox0=\lastbox
\setbox2=\hbox{}%
\wd2=\wd0 %
\ht2=\ht0 %
\dp2=\dp0 %
\copy2 %
\endgroup
\hfil
}
\newcommand*{\dummy@classz}{%
\@classx
\@tempcnta \count@
\prepnext@tok
\@addtopreamble{%
\ifcase \@chnum
\hfil \d@llarbegin
\dummy@insert@column@h
\d@llarend \hfil
\or
\hskip1sp\d@llarbegin
\dummy@insert@column@h
\d@llarend \hfil
\or
\hfil\hskip1sp\d@llarbegin
\dummy@insert@column@h
\d@llarend
\or
$\vcenter
\@startpbox{\@nextchar}\insert@column \dummy@endpbox
$%
\or
\vtop
\@startpbox{\@nextchar}\insert@column \dummy@endpbox
\or
\vbox
\@startpbox{\@nextchar}\insert@column \dummy@endpbox
\fi
}%
\prepnext@tok
}
\newcommand*{\tabulardummysetup}{%
\renewcommand*{\cellcolor}[1]{\null}%
\let\@classz\dummy@classz
}
\newcommand{\tabularfix}[1]{%
\def\tabularfix@contents{\ignorespaces#1\ifhmode\unskip\fi}%
\leavevmode
\rlap{\tabularfix@contents}%
\begingroup
\tabulardummysetup
\tabularfix@contents
\endgroup
}
\makeatother
\setlength{\arrayrulewidth}{1.5\arrayrulewidth}
\begin{document}
\tabularfix{%
\begin{tabular}[t]{|l|c|r|}
\hline
Some & \cellcolor{blue!25}coloured & contents \\
\hline
\multicolumn{2}{|c|}{\cellcolor{blue!25}multicolumn coloured} &
\cellcolor{blue!6}other color \\ \hline
Some & \cellcolor{blue!15}coloured & \multicolumn{1}{p{20mm}|}{contents} \\
\hline
\end{tabular}%
}
\bigskip
\begingroup
\tabulardummysetup
\begin{tabular}{|l|c|r|}
\hline
Some & \cellcolor{blue!25}coloured & contents \\
\hline
\multicolumn{2}{|@{\kern\tabcolsep}c|}{\cellcolor{blue!25}multicolumn coloured} &
\cellcolor{blue!6}other color \\ \hline
Some & \cellcolor{blue!15}coloured & \multicolumn{1}{p{20mm}|}{contents} \\
\hline
\end{tabular}%
\endgroup
\end{document}
答案2
该软件包nicematrix
有专门用于解决该问题的工具。在该软件包的环境下{NiceTabular}
,规则不会消失,因为彩色面板是在规则之前绘制的(信息先前写在文件中aux
:这就是为什么您需要多次编译的原因)。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}{lcr}[colortbl-like,hvlines]
Some & \cellcolor{blue!25}coloured & contents \\
\Block[fill=blue!25]{1-2}{multicolumn} & & \cellcolor{blue!6}other color \\
Some & \cellcolor{blue!15}coloured & contents \\
\end{NiceTabular}
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。
如果您愿意,也可以在主数组之外指定格式化指令(输出是相同的)。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}{lcr}[hvlines]
\CodeBefore
\cellcolor{blue!25}{1-2,2-1,2-2,3-2}
\cellcolor{blue!6}{2-3}
\Body
Some & coloured & contents \\
\Block{1-2}{multicolumn} & & other color \\
Some & coloured & contents \\
\end{NiceTabular}
\end{document}