如何将表格的整个行切换到数学模式或将数组的整个行切换到文本模式?

如何将表格的整个行切换到数学模式或将数组的整个行切换到文本模式?

看着另一个问题,我想知道是否有办法设置整个数学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来实现两个目标。\textarray\ensuremathtabular

我创建了一个宏\setrowC,它采用C命令作为其参数,并且\setrowE采用nvironment 作为其参数。它们都作用于eE类型列。

\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星号和无星号版本的,则可以使用以下命令(内置的\@ifstarxparse没有工作的,所以我定义了\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}

生产

在此处输入图片描述

相关内容