如何在乳胶表中进行简单计算

如何在乳胶表中进行简单计算

在此,我愿做三件事:

1)我希望我的表格像下面这样

在此处输入图片描述

而我的是

在此处输入图片描述

2)我希望数字以与标题 p 相同的格式显示(粗体)

3) 我希望 latex 进行一些计算。我的表中的 p 代表女性比例 (女性/(男性 + 女性))。我想知道 latex 是否可以帮我做到这一点,因为我有 16 个组,但不想计算每个组?

% !TEX encoding = UTF-8 Unicode
\documentclass[a4paper,12pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[turkish]{babel}
\usepackage{amsmath}
\usepackage{amssymb}

\begin{document}

\begin{table}[h!]
\centering
\begin{tabular}{c|c|c|r} 

Group No & Females  & Males & \textbf{p} \\ \hline
1 & 18 & 11 &  \\
2 & 31 & 22 &  \\
3 & 34 & 27 &  \\
4 & 33 & 29 &  \\
5 & 27 & 24 &  \\
6 & 33 & 29 &  \\
7 & 28 & 25 &  \\
8 & 23 & 26 &  \\
9 & 33 & 38 &  \\
10 & 12 & 14 &  \\
11 & 19 & 23 &  \\
12 & 25 & 31 &  \\
13 & 14 & 20 &  \\
14 & 2 & 20 &  \\
15 & 22 & 6 &  \\
16 & 7 & 34 &  \\
\end{tabular}
\end{table}
\end{document}

答案1

这是一个使用 和 的解决方案collcellxparse对于\fp_eval:n

\documentclass{article}
\usepackage{collcell,booktabs,siunitx}
\usepackage{xparse}

\newcolumntype{F}{>{\collectcell\rememberF}c<{\endcollectcell}}
\newcolumntype{M}{>{\collectcell\rememberM}c<{\endcollectcell}}
\newcolumntype{P}{>{\collectcell\computeP}r<{\endcollectcell}}

\newcommand{\rememberF}[1]{%
  \gdef\FEMALE{#1}#1%
}
\newcommand{\rememberM}[1]{%
  \gdef\MALE{#1}#1%
}

\ExplSyntaxOn
\NewDocumentCommand{\computeP}{}
 {
  \bfseries\fp_eval:n { round ( \FEMALE/(\FEMALE+\MALE) , 2 ) }
 }
\ExplSyntaxOff

\begin{document}

\begin{tabular}{c F M P}
\toprule
Group No &
  \multicolumn{1}{c}{Females} &
  \multicolumn{1}{c}{Males} &
  \multicolumn{1}{c}{\textbf{p}} \\
\midrule
1 & 18 & 11 &  \\
2 & 31 & 22 &  \\
3 & 34 & 27 &  \\
4 & 33 & 29 &  \\
5 & 27 & 24 &  \\
6 & 33 & 29 &  \\
7 & 28 & 25 &  \\
8 & 23 & 26 &  \\
9 & 33 & 38 &  \\
10 & 12 & 14 &  \\
11 & 19 & 23 &  \\
12 & 25 & 31 &  \\
13 & 14 & 20 &  \\
14 & 2 & 20 &  \\
15 & 22 & 6 &  \\
16 & 7 & 34 &  \\
\bottomrule
\end{tabular}

\end{document}

功能的使用booktabs不是强制性的,但是没有垂直规则的表格布局会更好。

在此处输入图片描述

F和列类型分别记住和M中的条目并打印它们,列类型计算比率并打印它。在第一行中,必须使用以避免这些宏启动。\FEMALE\MALEP\multicolumn

可以在宏中更改小数位数\computeP,我使用的值是2

答案2

另一个解决方案是使用spreadtab包,以及siunitxbooktabsmakecell改善表格的外观。spreadtab 包允许定义计算公式,其中我使用\STcopy{v}{formula},其中v参数使公式翻译为同一列的所有单元格。

另一个功能是我定义了一个rowno计数器,因此第一列的行号会自动显示,而无需输入它们。

\documentclass[a4paper,12pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage[turkish]{babel}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{array, spreadtab, booktabs}
\usepackage{makecell}
\usepackage{siunitx}
\sisetup{table-format = 2.0, table-number-alignment=center}
\newcounter{rowno}

\begin{document}

\begin{table}[h!]
\centering\setcounter{rowno}{0}
\STautoround{2}
\begin{spreadtab}{{tabular}{ @{}>{\stepcounter{rowno} \therowno}c SS>{\bfseries}c}}
\toprule
@ \multicolumn{1}{c}{\thead{Group\\ No}} & @ \multicolumn{1}{c}{Females} & @ \multicolumn{1}{c}{Males} & @p\\
\midrule
& 18 & 11 & \STcopy{v}{b2 /(b2+ c2)}\\
 & 31 & 22 & \\
 & 34 & 27 & \\
 & 33 & 29 & \\
 & 27 & 24 & \\
 & 33 & 29 & \\
 & 28 & 25 & \\
 & 23 & 26 & \\
 & 33 & 38 & \\
 & 12 & 14 & \\
 & 19 & 23 & \\
 & 25 & 31 & \\
 & 14 & 20 & \\
 & 2 & 20 & \\
 & 22 & 6 & \\
 & 7 & 34 & \\
\bottomrule
\end{spreadtab}
\end{table}

\end{document} 

在此处输入图片描述

相关内容