使表格的整行都划掉

使表格的整行都划掉

相关将表格第一行全部设为粗体,但解决方案似乎不适用于删除文本(参见影响所有后续文本的删除线命令,例如 \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

第二段代码的输出

相关内容