自动水平线简介

自动水平线简介

是否有一个包或简单的命令可以\hline在环境中的每一行后插入一个tabular?手动完成所有操作相当烦人,似乎应该有一种简单的方法来做到这一点(这似乎是一件比较常见的事情)。

有什么东西可以做到这一点?

编辑:如果不言而喻的话,我也希望在第一行上方有一条线。

澄清:我目前有如下内容:

\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage{amsmath,amsthm}
\usepackage{amsfonts}

\begin{document}
\begin{tabular}{l}
\hline
a\\
\hline
a\\
\hline
a\\
\hline
a\\
\hline
a\\
\hline
\end{tabular}

\end{document}

我希望有一些东西可以让我免去\hline多次打字的麻烦。

答案1

要使表格行后面跟着一行,标记是\\\hline这只是 8 个字符,因此很难想出一个不那么烦人的标记,因为无论如何你都必须手动标记行的末尾。也许你只需要每行末尾的\def\nl{\\\hline}三个字符。\nl

答案2

该 TeX 代码如何在表格环境中生成自动 \hline?

自动水平线简介

  • 目的是保持未修改的语法在表格环境中,但全局改变格式。
  • 这会改变含义\\对于所有表格环境(使用\@tabularcr)。
  • \@tabularcr是您要查找的宏。它\\代表表格行中的内容,但使用array包时除外,请参阅Array下面的包更改。

    1. 克隆它:\let \clone@tabularcr \@tabularcr
    2. 重置:\def\@tabularcr{\clone@tabularcr\hline}

请注意,最好使用包\midrule中的booktabs而不是\hline。还请注意,重新定义\\可能意味着您在尝试使用 时可能会遇到困难\bottomrule,因为您可能会在最后一行下方出现不想要的双线。有一种方法可以检测最后一行,但它很挑剔。我会在有空时添加它。

代码

\documentclass{article}
\usepackage{fontspec}
\catcode`@=11 % or \makeatletter to change category code of @ to 11 and temporarily to access kernel macro \@tabularcr
\let \clone@tabularcr \@tabularcr
\def\@tabularcr{\clone@tabularcr\hline}
\catcode`@=12 % or \makeatother to restore category code of @ to 12
\begin{document}
\begin{tabular}{lll}
Meaning & col2 & col3 \\
\meaning\\ & col2 & col3 \\
col1 & col2 & col3 \\
\end{tabular}
\end{document}

Array软件包变更

请注意,array包(以及任何加载的包,array例如)将\RequirePackage{array}的定义更改为\\

\relax \iffalse {\fi \ifnum 0=‘}\fi \@ifstar \@xarraycr \@xarraycr

\@tabularcr变成\@xarraycr。因此,只需在上面的代码中用 替换 即可与 array 包兼容\@tabularcr\@xarraycr


笔记

在表格环境中,\\在表格环境的开始/结束处在 LaTeX 内核中重新定义。

latex.ltx 的相关片段

有关详细信息,请参阅 latex.ltx(LaTeX 内核)。

\def\@tabular{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
   \let\@classz\@tabclassz
   \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}% sets \\ = \@tabularcr

% defines \@tabularcr to look for starred version
\def\@tabularcr{% 
  {\ifnum0=`}\fi\@ifstar\@xtabularcr\@xtabularcr}

% some starred/non-starred code for dealing with table rows
\def\@xtabularcr{\@ifnextchar[\@argtabularcr{\ifnum0=`{\fi}\cr}}
\def\@argtabularcr[#1]{%
  \ifnum0=`{\fi}%
    \ifdim #1>\z@
      \unskip\@xargarraycr{#1}%
    \else
      \@yargarraycr{#1}%
    \fi}

答案3

tabu 包提供了一个\everyrow{\hline}命令。

但请注意,如果您想通过 htlatex/tex4ht 转到 html 输出,tabu 包尚不受支持。

答案4

解决方案tabularray包裹:

\documentclass[12pt]{article}

\usepackage{tabularray}

\begin{document}

\begin{tblr}{
  colspec = {lcr},
  hlines,
}
 a & b & c \\
 a & b & c \\
 a & b & c \\
 a & b & c \\
 a & b & c \\
 a & b & c \\
\end{tblr}

\end{document}

在此处输入图片描述

相关内容