我是 LaTeX 新手。我有一个 tex 文档,旁边有一个 cls tex 格式表,我创建了期刊文章。是否可以进行更改,使文档中的所有表格都具有粗体标题行?如果可以,cls 文件的哪一部分应该更改?只有一部分涉及表格和图形,所以我认为更改应该发生在这里。提前感谢您的帮助。
% Graphics, tables and other formatting
\RequirePackage{graphicx,xcolor}
\RequirePackage{colortbl}
\RequirePackage{booktabs}
\RequirePackage{algorithm}
\RequirePackage[noend]{algpseudocode}
\RequirePackage{changepage}
\RequirePackage[left=48pt,% right=42pt,% top=46pt,% bottom=60pt,%
headheight=15pt,% headsep=10pt,% letterpaper,twoside]
{geometry}%
\RequirePackage[labelfont={bf,sf},%
labelsep=period,%
figurename=Fig.,%
singlelinecheck=off,%
justification=RaggedRight]{caption}
\setlength{\columnsep}{24pt} % Distance between the two columns of text
\setlength{\parindent}{12pt} %
段落缩进
答案1
下面更新tabular
环境并假设第一行(直到第一行的所有内容\\
)包含标题。 这标题会更新以在每个单元格开头插入您提供的任何内容\setheaderformat{<format>}
,注意始终保持\hline
(或\toprule
,从booktabs
)作为标题。\multicolumn
标题部分条目受支持(通过\mc
;见下文),但其他任何内容均不受支持(例如多行标题等)。
\documentclass{article}
\usepackage{environ,etoolbox,regexpatch,booktabs}
\let\oldtabular\tabular
\let\endoldtabular\endtabular
\makeatletter
\newcommand{\setheaderformat}[1]{\def\header@format{#1}}
\def\format@header#1\\#2\relax{%
\def\tabular@header{#1\\}%
\def\tabular@other{#2\relax\relax}%
\patchcmd{\tabular@header}{\hline}{\hline\TAB}{}{}% \hline support (insert \TAB *after* \hline)
\patchcmd{\tabular@header}{\toprule}{\toprule\TAB}{}{}% \toprule support (for booktabs)
\patchcmd{\tabular@other}{\\\relax\relax}{}{}{}% Remove possible ending \\
\patchcmd{\tabular@other}{\relax\relax}{}{}{}%
}
\RenewEnviron{tabular}[2][c]{%
\expandafter\format@header\BODY\\\relax% Extract header/other components
\gdef\TAB{\header@format\gdef\TAB{& \header@format\ignorespaces}\ignorespaces}% Update how \TAB will work
\xpatchcmd*{\tabular@header}{&}{\TAB}{}{}% Replace all & with \TAB in header
\begin{oldtabular}[#1]{#2}
\tabular@header
\tabular@other
\end{oldtabular}%
}
\makeatother
\setheaderformat{\bfseries}
\begin{document}
\begin{oldtabular}{ *{3}{c} }
\hline
a & b & c \\
\hline
d & e & f \\
g & h & i \\
\hline
\end{oldtabular}
\qquad
\begin{tabular}{ *{3}{c} }
\hline
a & b & c \\
\hline
d & e & f \\
g & h & i \\
\hline
\end{tabular}
\bigskip
\begin{oldtabular}{ *{3}{c} }
\toprule
a & b & c \\
\midrule
d & e & f \\
g & h & i \\
\bottomrule
\end{oldtabular}
\qquad
\begin{tabular}{ *{3}{c} }
\toprule
a & b & c \\
\midrule
d & e & f \\
g & h & i \\
\bottomrule
\end{tabular}
\bigskip
% How to manage \multicolumn
\newcommand{\mc}{& \multicolumn}
\setheaderformat{\itshape$\rightarrow$}%
\begin{oldtabular}{ *{3}{c} }
\toprule
a & b & \multicolumn{1}{r}{\bfseries c$\leftarrow$} \\
\midrule
d & e & f \\
g & h & i \\
\bottomrule
\end{oldtabular}
\qquad
\begin{tabular}{ *{3}{c} }
\toprule
a & b \mc{1}{r}{\bfseries c$\leftarrow$} \\
\midrule
d & e & f \\
g & h & i \\
\bottomrule
\end{tabular}
\end{document}
答案2
值得一提的是,在 ConTeXt 中,这相对容易实现。要使表格的第一行加粗,您可以使用
\setupTABLE[row][first][style=bold]
但是,全局进行此更改并不是一个好主意,因为在某些情况下您可能不希望第一行加粗。相反,最好定义一个新的设置并在表中使用它:
\startsetups table:header
\setupTABLE[row][first][style=bold]
\stopsetups
然后使用它作为:
\startTABLE[setups=table:header]
这是一个显示结果的完整示例。
\startsetups table:header
\setupTABLE[each][each][frame=off, offset=0.25ex, rulethickness=1.5pt]
\setupTABLE[row][first][style=bold, topframe=on, bottomframe=on]
\setupTABLE[row][last] [bottomframe=on]
\stopsetups
\starttext
\startTABLE[setups=table:header]
\NC Type \NC First \NC Second \NC Third \NC \NR
\NC A \NC B \NC C \NC D \NC \NR
\NC A \NC B \NC C \NC D \NC \NR
\NC A \NC B \NC C \NC D \NC \NR
\NC A \NC B \NC C \NC D \NC \NR
\stopTABLE
\stoptext
这使
不幸的是,正如您所发现的,LaTeX 中的任何表格机制都没有提供表格中内容和显示之间的这种分离。