在表格和长表中全局设置垂直和水平规则的样式

在表格和长表中全局设置垂直和水平规则的样式

我想通过应用文件将所有表格中的所有水平线改为蓝色,将所有垂直线改为红色.sty。我无法更改表格本身的实际 LaTeX 标记,因为它们是由 Sphinx 自动生成的。

目前,我有这个:

% my .sty file
% red vertical lines
\arrayrulecolor{red}
% table hline formatting
\let\myhline\hline
\renewcommand{\hline}{\arrayrulecolor{blue}\myhline}

但是,这仅适用于,tabular但不适用于longtable

以下是一个说明此问题的示例文档:

\documentclass{article}
\usepackage{colortbl}
\usepackage{longtable}

% red vertical lines
\arrayrulecolor{red}
% table hline formatting
\let\myhline\hline
\renewcommand{\hline}{\arrayrulecolor{blue}\myhline}

% I cannot change anything after this line!!!
\begin{document}
\begin{longtable}{|c|c|}
\hline
a & b \\
\hline
\endfirsthead
c & d \\
\hline
\end{longtable}

\begin{tabular}{|c|c|}
\hline
e & f \\
\hline
g & h \\
\hline
\end{tabular}
\end{document}

以下是输出:

图片

如您所见,tabular表格样式正确,水平线为蓝色,垂直线为红色。但是,表格longtable样式不正确。

我怎样才能使longtablehline行为与 的行为一样tabular

我在用pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019)

答案1

好的,我明白了。仔细研究后,longtable.sty我发现它正在使用,\LT@hline所以我也覆盖了这些。

在一个wtf.sty文件中我现在有这些:

% red vertical lines
\arrayrulecolor{red}
% table hline formatting
\let\my@hline\hline
\renewcommand{\hline}{\arrayrulecolor{blue}\my@hline}
\let\myLT@hline\LT@hline
\renewcommand{\LT@hline}{\arrayrulecolor{blue}\myLT@hline\arrayrulecolor{red}}

(您可以使用和 将其内联到您的.tex文档中)\makeatletter\makeatother

这是一个丑陋的黑客行为,但似乎有效。

\documentclass{article}
\usepackage{colortbl}
\usepackage{longtable}
\usepackage{wtf}

\begin{document}

\begin{tabular}{|c|c|}
\hline
e & f \\
\hline
g & h \\
\hline
\end{tabular}

\begin{longtable}{|c|c|}
\hline
a & b \\
\hline
\endfirsthead
c & d \\
\hline
\end{longtable}

\begin{tabular}{|c|c|}
\hline
e & f \\
\hline
g & h \\
\hline
\end{tabular}
\end{document}

图片

笔记:一般来说,不建议覆盖内置宏\hline。但是,我在这里别无选择,因为我正在尝试更改 Sphinx 生成的输出的行为。

答案2

hhline有一种方法可以做到这一点:

\documentclass{article}
\usepackage{xcolor}
\usepackage{colortbl}
\usepackage{longtable}
\usepackage{ehhline}
\usepackage{xparse}

\makeatletter
\def\hline@color{black}
\newcommand{\hlinecolor}[1]{\def\hline@color{#1}}
\newcommand{\hsl}{\leaders\hbox{\textcolor{\hline@color}{\rule{0.1pt}{0.4pt}}}\hfil}
\makeatother
\newcommand{\myhline}{\hhline{!{\hsl}!{\hsl}}}

% I cannot change anything after this line!!!
\begin{document}
\arrayrulecolor{blue}
\hlinecolor{red}
\centering
\begin{longtable}{|c|c|}
\myhline
a & b \\
\myhline
\endfirsthead
c & d \\
\myhline
\end{longtable}

\hlinecolor{teal}
\begin{tabular}{|c|c|}
\myhline
e & f \\
\myhline
g & h \\
\myhline
\end{tabular}
\end{document}

在此处输入图片描述

相关内容