我想通过应用文件将所有表格中的所有水平线改为蓝色,将所有垂直线改为红色.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
样式不正确。
我怎样才能使longtable
的hline
行为与 的行为一样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}