是否有一个包或简单的命令可以\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
自动水平线简介
- 目的是保持未修改的语法在表格环境中,但全局改变格式。
- 这会改变含义
\\
对于所有表格环境(使用\@tabularcr
)。 \@tabularcr
是您要查找的宏。它\\
代表表格行中的内容,但使用array
包时除外,请参阅Array
下面的包更改。- 克隆它:
\let \clone@tabularcr \@tabularcr
- 重置:
\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}