使用 cls tex 文档类将所有表格中的标题行加粗

使用 cls tex 文档类将所有表格中的标题行加粗

我是 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 中的任何表格机制都没有提供表格中内容和显示之间的这种分离。

相关内容