看着另一个问题,我想知道是否有办法设置整个排数学tabular
模式(不重复$...$
每个单元格)或整个排到array
文本模式(无需\text{...}
对每个单元格重复)。
在将整行表格格式化为粗体此设置是针对粗体/斜体/任何其他切换行进行的,但当单元格内容应该是宏的参数或环境的主体时,也可以这样做吗?
\documentclass{article}
\usepackage{amsmath}
\begin{document}
For example, how to set, once for all, the second row to text here:
\[
\begin{array}{*{14}{c}}
\dfrac{17}{91} & \dfrac{78}{85} & \dfrac{19}{51} & \dfrac{23}{38} & \dfrac{29}{33} & & & & & & & & & \dfrac{55}{1} \\[10pt]
\text{A} & \text{B} & \text{C} & \text{D} & \text{E} & \text{F} & \text{G} & \text{H} & \text{I} & \text{J} & \text{K} & \text{L} & \text{M} & \text{N} \\
\end{array}
\]
Or the first row to math here:
\begin{center}
\begin{tabular}{*{14}{c}}
$\dfrac{17}{91}$ & $\dfrac{78}{85}$ & $\dfrac{19}{51}$ & $\dfrac{23}{38}$ & $\dfrac{29}{33}$ & & & & & & & & & $\dfrac{55}{1}$ \\[10pt]
A & B & C & D & E & F & G & H & I & J & K & L & M & N \\
\end{tabular}
\end{center}
\end{document}
答案1
下面可以指定一个命令,该命令的参数应为它使用的行的每个单元格的内容collcell
。我还指定了两种列类型e
,并且E
都采用一个参数,该参数应为应应用效果的列类型。E
应为行中的最后一列,因为它会重置定义,所以应该受到影响。
通过这种方法,您可以在 an 中使用amsmath
's或在 a 中使用 's来实现两个目标。\text
array
\ensuremath
tabular
我创建了一个宏\setrowC
,它采用C命令作为其参数,并且\setrowE
采用埃nvironment 作为其参数。它们都作用于e
和E
类型列。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularx}
\def\setrowC#1#2&{%
\gdef\rowmac{#1}\rowmac{#2}&}
\def\setrowE#1#2&{%
\gdef\rowmac##1{\begin{#1}##1\end{#1}}%
\rowmac{#2}&}
\newcommand*\clearrow{%
\global\let\rowmac\relax}
\clearrow
\usepackage{collcell}
\newcolumntype{e}[1]{>{\collectcell\rowmac}#1<{\endcollectcell}}
\newcolumntype{E}[1]{e{#1}<{\clearrow}}
\begin{document}
Or the first row to math here:
\begin{center}
\begin{tabular}{*{13}{e{c}}E{c}}
\setrowC{\ensuremath} \dfrac{17}{91} &\dfrac{78}{85} & \dfrac{19}{51} &
\dfrac{23}{38} & \dfrac{29}{33} & & & & & & & & & \dfrac{55}{1} \\[10pt]
A & B & C & D & E & F & G & H & I & J & K & L & M & N \\
\setrowE{bf}A & B & C & D & E & F & G & H & I & J & K & L & M & N \\
\end{tabular}
\end{center}
\[
\begin{array}[]{e{c}E{c}}
\setrowC{\text} text & text\\
\frac{5}{4} & \frac{4}{5}
\end{array}
\]
\end{document}
如果您想要带有\setrow
星号和无星号版本的,则可以使用以下命令(内置的\@ifstar
和xparse
没有工作的,所以我定义了\myifstar
):
\def\setrow#1{%
\myifstar{#1}%
{\setrowE}%
{\setrowC{#1}}%
}
\makeatletter
\def\myifstar#1{%
\if*#1
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\makeatother
答案2
对于第二种情况(制作整行math
),您可以按照第一个答案的精神做一些事情将整行表格格式化为粗体:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularx}
\newcommand\setrow[1]{\gdef\rowmac{\begin{#1}}\gdef\erowmac{\end{#1}}\begin{#1}\ignorespaces}
\newcommand\clearrow{\global\let\rowmac\relax \global\let\erowmac\relax}
\clearrow
\begin{document}
Or the first row to math here:
\begin{center}
\begin{tabular}{*{13}{>{\rowmac}c<{\erowmac}}>{\rowmac}c<{\erowmac\clearrow}}
\setrow{math} \dfrac{17}{91} &\dfrac{78}{85} & \dfrac{19}{51} &
\dfrac{23}{38} & \dfrac{29}{33} & & & & & & & & & \dfrac{55}{1} \\[10pt]
A & B & C & D & E & F & G & H & I & J & K & L & M & N \\
\setrow{bf}A & B & C & D & E & F & G & H & I & J & K & L & M & N \\
\end{tabular}
\end{center}
\end{document}
生产