我有通过 R(Brew、Knitr)自动生成(填充)的 LaTeX 表,并使用 PdfLaTeX(MiKTeX)进行编译。每个统计测试都有几行 p 值。我希望 LaTeX 自动根据以下两种情况格式化它们:
- 如果 p 值 <= 0.05 且 >= 0.01,则用尾随星号将该值加粗;
- 如果 p 值 < 0.01,则
<
在新的加粗值 = 0.01 前面插入一个符号。
如果 p 值不满足任何条件(即 > 0.05),则保留原始 p 值。下面是 LaTeX 表格示例,后面是预期表格示例。
\usepackage{alltt}
\usepackage{booktabs}
\usepackage[utf8]{inputenc}
\usepackage[super]{nth}
\usepackage[flushleft]{threeparttable}
\usepackage{float}
\usepackage[labelfont=bf]{caption}
\captionsetup[table]{labelsep=space,
justification=raggedright, singlelinecheck=off}
\usepackage{chngpage}
\begin{document}
\begin{table}
\centering
\caption*{\textbf{Table}: Statistics for A, B, C.}\label{table}
\begin{tabular}{llll}
Statistic & A & B & C \\
Mean & 8.3 & 9.4 & 7.6 \\
t & 0.82 & 0.72 & 0.92 \\
p-value & 0.06 & 0.12 & 0.05 \\
wmw & 80.23 & 1000.34 & 1243.44 \\
p-value & 0.04 & 0.09 & 0.00
\end{tabular}
\end{table}
\end{document}
\usepackage{alltt}
\usepackage{booktabs}
\usepackage[utf8]{inputenc}
\usepackage[super]{nth}
\usepackage[flushleft]{threeparttable}
\usepackage{float}
\usepackage[labelfont=bf]{caption}
\captionsetup[table]{labelsep=space,
justification=raggedright, singlelinecheck=off}
\usepackage{chngpage}
\begin{document}
\begin{table}
\centering
\caption*{\textbf{Table}: Statistics for A, B, C.}\label{table}
\begin{tabular}{llll}
Statistic & A & B & C \\
Mean & 8.3 & 9.4 & 7.6 \\
t & 0.82 & 0.72 & 0.92 \\
p-value & 0.06 & 0.12 & \textbf{0.05} \\
wmw & 80.23 & 1000.34 & 1243.44 \\
p-value & \textbf{0.04} & 0.09 & \textless{}\textbf{0.01}
\end{tabular}
\end{table}
\end{document}
我尝试了\ifnum
很多次都没有成功,返回错误! Missing number, treated as zero.
\newcommand\pval[1]{
\ifnum{#1}<{0.05}=0
\textbf{#1}
else
#1
fi
}
答案1
您只能使用\ifnum
整数。对于浮点数,您需要使用\FPiflt
类似FP包。您还可以使用以下组合来“自动化”此操作:大批包,定义一个新的列类型,以及胶原细胞包,将单元格的内容传递给宏。下面两行关键代码是:
\newcolumntype{P}{>{\collectcell\pval}c<{\endcollectcell}}
\newcommand\pval[1]{\FPiflt{#1}{0.5}\textbf{#1}\else#1\fi}
这些行定义了将宏P
应用于每个单元格的行列类型\pcal
。有了这个,OP 中的 MWE 会产生:
完整代码如下:
\documentclass{article}
\usepackage{alltt}
\usepackage{booktabs}
\usepackage[utf8]{inputenc}
\usepackage[super]{nth}
\usepackage[flushleft]{threeparttable}
\usepackage{float}
\usepackage[labelfont=bf]{caption}
\captionsetup[table]{labelsep=space,
justification=raggedright, singlelinecheck=off}
\usepackage{chngpage}
\usepackage{fp,collcell,array}
\newcolumntype{P}{>{\collectcell\pval}c<{\endcollectcell}}
\newcommand\pval[1]{\FPiflt{#1}{0.5}\textbf{#1}\else#1\fi}
\begin{document}
\begin{table}
\centering
\caption*{\textbf{Table}: Statistics for A, B, C.}\label{table}
\begin{tabular}{lllP}
Statistic & A & B &\multicolumn{1}{c}{C} \\
Mean & 8.3 & 9.4 & 7.6 \\
t & 0.82 & 0.72 & 0.92 \\
p-value & 0.06 & 0.12 & 0.05 \\
wmw & 80.23 & 1000.34 & 1243.44 \\
p-value & 0.04 & 0.09 & 0.00
\end{tabular}
\end{table}
\end{document}
请注意,您需要使用\multicolumn
列标题。我刚刚将条目设置为粗体(如果小于 0.5),其他装饰可以以相同的方式添加。
编辑
如果如评论中所述,您不想将这种特殊格式应用于整个列,那么您可以\pval
根据需要手动向表中添加条目。
\documentclass{article}
\usepackage{alltt}
\usepackage{booktabs}
\usepackage[utf8]{inputenc}
\usepackage[super]{nth}
\usepackage[flushleft]{threeparttable}
\usepackage{float}
\usepackage[labelfont=bf]{caption}
\captionsetup[table]{labelsep=space,
justification=raggedright, singlelinecheck=off}
\usepackage{chngpage}
\usepackage{fp}
\newcommand\pval[1]{\FPiflt{#1}{0.5}\textbf{#1}\else#1\fi}
\begin{document}
\begin{table}
\centering
\caption*{\textbf{Table}: Statistics for A, B, C.}\label{table}
\begin{tabular}{llll}
Statistic & A & B &C \\
Mean & 8.3 & 9.4 & 7.6 \\
t & 0.82 & 0.72 & 0.92 \\
p-value & 0.06 & 0.12 & \pval{0.05}\\
wmw & 80.23 & 1000.34 & 1243.44 \\
p-value & 0.04 & 0.09 & 0.00
\end{tabular}
\end{table}
\end{document}