按一定量划分表格单元格

按一定量划分表格单元格

我在表格中输入的值有误。我需要将所有值除以 105。有没有一种方法可以做到这一点,而不必用一个全新的表格替换它?

 % Table generated by Excel2LaTeX from sheet 'Sheet1'
    \begin{table}[htbp]
      \centering
      \caption{Add caption}
        \begin{tabular}{rrrr}
        \toprule
              & A     & B     & C \\
        \midrule
        1     & 122   & 133   & 156 \\
        2     & 112   & 135   & 155 \\
        3     & 150   & 139   & 158 \\
        4     & 145   & 135   & 159 \\
        5     & 150   & 130   & 200 \\
        \bottomrule
        \end{tabular}%
      \label{tab:addlabel}%
    \end{table}%

答案1

您可以使用spreadtab包;一个简单的例子:

\documentclass{article}
\usepackage{numprint}
\usepackage{booktabs}
\usepackage{spreadtab}

\newcommand\Factor{105}

\begin{document}

\renewcommand\STprintnum[1]{\numprint{#1}}
\nprounddigits{3}
\begin{spreadtab}{{tabular}{rrrr}}
\toprule
               & @A              & @B            & @C         \\
\midrule
        @1     & 122/\Factor   & 133/\Factor   & 156/\Factor \\
        @2     & 112/\Factor   & 135/\Factor   & 155/\Factor \\
        @3     & 150/\Factor   & 139/\Factor   & 158/\Factor \\
        @4     & 145/\Factor   & 135/\Factor   & 159/\Factor \\
        @5     & 150/\Factor   & 130/\Factor   & 200/\Factor \\
\bottomrule
\end{spreadtab}

\end{document}

在此处输入图片描述

而且使用\STcopy这项工作更简单;我们用一条指令构建一个包含除法结果的新表并隐藏原始值:

\documentclass{article}
\usepackage{numprint}
\usepackage{booktabs}
\usepackage{spreadtab}

\newcommand\Factor{105}

\begin{document}

\renewcommand\STprintnum[1]{\numprint{#1}}
\nprounddigits{3}
\begin{spreadtab}{{tabular}{rrrrrrr}}
\toprule
 & \SThidecol @A & \SThidecol @B & \SThidecol @C & @A & @B & @C \\
\midrule
@1 & 122 & 133 & 156 & \STcopy{>3,v4}{b2/\Factor} &  & \\
@2 & 112 & 135 & 155 & & & \\
@3 & 150 & 139 & 158 & & & \\
@4 & 145 & 135 & 159 & & & \\
@5 & 150 & 130 & 200 & & & \\
\bottomrule
\end{spreadtab}

\end{document}

在此处输入图片描述

答案2

您也可以这样做没有通过使用更改数据条目包裹collcell

下面我定义了R列类型,它将数字除以 中指定的值\Factor,并使用 打印数字,\pgfmathprintnumber从而允许格式化数字。[precision=3]已应用选项仅打印三位小数。左侧的表格使用r列类型,右侧的表格使用R列类型。

在此处输入图片描述

笔记:

  • 下面我使用了来自的切换etoolbox,但可以使用其他方法实现相同的功能,例如条件排版/构建

手动指定标题的结尾:

\StartingHeader此版本需要在标题开头添加(这将禁用将因子应用于数据条目),并\DoneWithHeader在标题结尾添加,以便后续数据值除以\Factor。自动化版本如下。

代码:

\documentclass{article}
\usepackage{booktabs}
\usepackage{collcell}
\usepackage{pgf}
\usepackage{etoolbox}

\newcommand{\Factor}{105}%
\newcommand{\FactorCell}[1]{%
    \iftoggle{DoneWithHeader}{%
        \pgfmathsetmacro{\ComputedValue}{#1/\Factor}%
        \pgfmathprintnumber[,fixed,precision=3]{\ComputedValue}%
    }{%
        #1% Still working on header
    }%
}%
\newtoggle{DoneWithHeader}%
\togglefalse{DoneWithHeader}%
\newcommand*{\StartingHeader}{\global\togglefalse{DoneWithHeader}}%
\newcommand*{\DoneWithHeader}{\global\toggletrue{DoneWithHeader}}%

\newcolumntype{R}{>{\collectcell\FactorCell}r<{\endcollectcell}}

\begin{document}
\begin{tabular}{rrrr}
    \toprule
              & A     & B     & C \\
    \midrule
    1     & 122   & 133   & 156 \\
    2     & 112   & 135   & 155 \\
    3     & 150   & 139   & 158 \\
    4     & 145   & 135   & 159 \\
    5     & 150   & 130   & 200 \\
    \bottomrule
\end{tabular}%
\hspace{2.0ex}
\begin{tabular}{rRRR}
    \toprule\StartingHeader
              & A     & B     & C \\
    \midrule\DoneWithHeader
    1     & 122   & 133   & 156 \\
    2     & 112   & 135   & 155 \\
    3     & 150   & 139   & 158 \\
    4     & 145   & 135   & 159 \\
    5     & 150   & 130   & 200 \\
    \bottomrule
\end{tabular}%
\end{document}

自动化方法:

如果您总是\toprule在标题行之前有一个,并且\midrule在数据条目之前有一个,则可以自动设置\StartingHeader\DoneWithHeader。在此版本中,唯一需要进行的更改是将数据列类型形式切换rR

下面的 MWE 产生与上面相同的输出。

参考:

  • 我需要添加和\noexpand的重新定义。请参阅\toprule\midrule将 \cmidrule 包装在宏中了解更多详情。似乎\toprule\midrule有类似的问题。

代码:

\documentclass{article}
\usepackage{booktabs}
\usepackage{collcell}
\usepackage{pgf}
\usepackage{etoolbox}
\usepackage{letltxmacro}

\newcommand{\Factor}{105}%
\newcommand{\FactorCell}[1]{%
    \iftoggle{DoneWithHeader}{%
        \pgfmathsetmacro{\ComputedValue}{#1/\Factor}%
        \pgfmathprintnumber[precision=3]{\ComputedValue}%
    }{%
        #1% Still working on header
    }%
}%
\newtoggle{DoneWithHeader}%
\togglefalse{DoneWithHeader}%
\newcommand*{\StartingHeader}{\global\togglefalse{DoneWithHeader}}%
\newcommand*{\DoneWithHeader}{\global\toggletrue{DoneWithHeader}}%

\LetLtxMacro\OldTopRule\toprule
\def\toprule{\StartingHeader\noexpand\OldTopRule}

\LetLtxMacro\OldMidRule\midrule
\def\midrule{\DoneWithHeader\noexpand\OldMidRule}

\newcolumntype{R}{>{\collectcell\FactorCell}r<{\endcollectcell}}

\begin{document}
\begin{tabular}{rrrr}
    \toprule
              & A     & B     & C \\
    \midrule
    1     & 122   & 133   & 156 \\
    2     & 112   & 135   & 155 \\
    3     & 150   & 139   & 158 \\
    4     & 145   & 135   & 159 \\
    5     & 150   & 130   & 200 \\
    \bottomrule
\end{tabular}%
\hspace{2.0ex}
\begin{tabular}{rRRR}
    \toprule
              & A     & B     & C \\
    \midrule
    1     & 122   & 133   & 156 \\
    2     & 112   & 135   & 155 \\
    3     & 150   & 139   & 158 \\
    4     & 145   & 135   & 159 \\
    5     & 150   & 130   & 200 \\
    \bottomrule
\end{tabular}%
\end{document}

相关内容