相关将表格第一行全部设为粗体,但解决方案似乎不适用于删除文本(参见影响所有后续文本的删除线命令,例如 \bfseries)。
到目前为止,我的解决方案是通过将相应的线覆盖为
\renewcommand{\sttableline}{\rlap{\rule[3pt]{1\paperwidth}{.4pt}}}
通过上面我第一个引用的问答中的命令。但是,这非常不灵活,需要根据相应表格在页面上的缩放/放置方式进行手动调整。
编辑:理想情况下,我正在寻找的解决方案无需对最后几列进行任何修改,只需要修改表头和前列的条目。
答案1
当别人提供更好的答案时,你总是可以使用tikzmark
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
\begin{tabular}{lcr}
a & a & a \\
\tikzmark{start}b & b & b\tikzmark{end} \\
c & c & c \\
\end{tabular}
\tikz[remember picture] \draw[overlay] ([yshift=.35em]pic cs:start) -- ([yshift=.35em]pic cs:end);
\end{document}
答案2
类似这样的方法可能是可行的。与 OP 引用的答案在方法上略有不同。也就是说,必须在行的末尾添加一个幻像列(其增加的空间用 来补偿,@{\hspace{-\tabcolsep}}
如我的 MWE 中所示,\fbox
表格周围有 )。
\relax
幻影列的替代方法是在\\
每个选项卡行的末尾添加。
\documentclass{article}
\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}}
\newcolumntype{^}{>{\relax\currentrowstyle}}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
#1\ignorespaces%
}
\def\mystyle#1\relax{\setbox0=\hbox{#1}\rule[2pt]{\wd0}{1pt}\kern-\wd0#1}
\begin{document}
\fbox{\begin{tabular}{$l^c^r^c@{\hspace{-\tabcolsep}}}
\rowstyle{\mystyle}
This is an entry & another entry & a third entry&\\
b & b & b &\\
\rowstyle{\mystyle}
data & other data & last data &\\
\end{tabular}}
\end{document}
tabular
实现相同目的的另一种方法是定义!
列类型,这种方式本身需要输入更少的内容
\documentclass{article}
\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}}
\newcolumntype{^}{>{\relax\currentrowstyle}}
\newcolumntype{!}{>{\relax\hspace*{-2\tabcolsep}}c}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
#1\ignorespaces%
}
\def\mystyle#1\relax{\setbox0=\hbox{#1}\rule[2pt]{\wd0}{1pt}\kern-\wd0#1}
\begin{document}
\fbox{\begin{tabular}{$l^c^r!}
\rowstyle{\mystyle}
This is an entry & another entry & a third entry&\\
b & b & b &\\
\rowstyle{\mystyle}
data & other data & last data &\\
\end{tabular}}
\end{document}
答案3
使用 的解决方案pst-node
。我使用了\psDefBoxNodes
,它将内容放在一个框中,并在该框中定义一系列节点(总共 12 个节点),然后我将行中第一个元素的节点连接到行中最后一个元素的节点:
\documentclass[x11names]{article}
\usepackage{pst-node}
\usepackage{auto-pst-pdf}
\begin{document}
\begin{postscript}
\begin{tabular}{lcr}
a & a & a \\
\psDefBoxNodes{B1}{b} & b & \psDefBoxNodes{B2}{b} \\
c & c & c \\
\end{tabular}
\ncline[nodesep=-2pt, offset=-0.3ex, linewidth=0.4pt, linecolor=IndianRed3]{B1: Cl}{B2: Cr}
\end{postscript}
\end{document}
答案4
{NiceTabular}
这是使用 的解决方案nicematrix
。该环境类似于经典环境{tabular}
(包array
),但在行、列和单元格下添加了 PGF/Tikz 节点。可以使用所谓的这些节点\CodeAfter
使用 Tikz 绘制您想要的任何规则。
\documentclass{article}
\usepackage{nicematrix,tikz}
\usepackage{booktabs}
\begin{document}
\begin{NiceTabular}{ccc}
\toprule
Sandra & Alexandra & Anne \\
Luc & Claude & Jean \\
Paul & Pierre & Jacques \\
Laurence & Sophie & Lucie \\
\bottomrule
\CodeAfter
\tikz \draw (3.5-|1) -- (3.5-|last) ;
\end{NiceTabular}
\end{document}
\Strike
如果您喜欢在要删除的行开头使用命令的语法,那么也可以:
\documentclass{article}
\usepackage{nicematrix,tikz}
\usepackage{booktabs}
\ExplSyntaxOn
\NewDocumentCommand{\Strike}{}
{
\tl_gput_right:Nx \g_nicematrix_code_after_tl
{ \shess_strike:n { \arabic { iRow } } }
\ignorespaces
}
\cs_new_protected:Nn \shess_strike:n
{ \tikz \draw (#1.5-|1) -- (#1.5-|last) ; }
\ExplSyntaxOff
\begin{document}
\begin{NiceTabular}{ccc}
\toprule
Sandra & Alexandra & Anne \\
\Strike Luc & Claude & Jean \\
Paul & Pierre & Jacques \\
Laurence & Sophie & Lucie \\
\bottomrule
\end{NiceTabular}
\end{document}
\g_nicematrix_code_after_tl
是 的一个参数nicematrix
,内部但公开的,对应所谓的\CodeAfter
。