我有通过 R (Rstudio、Knitr) 自动生成 (填充) 的 LaTeX 表,并使用 PdfLaTeX (MiKTeX) 进行编译。每个统计测试都有几行 p 值。
我正在使用 fp 包中的这个新命令(根据多个条件修改 LaTeX 表 p 值)
\newcolumntype{P}{>{\collectcell\pval}c<{\endcollectcell}}
\newcommand\pval[1]{\FPiflt{#1}{0.5}\textbf{#1}\else#1\fi}
如果 p 值低于 0.05,则以粗体显示。下面的示例是 Latex 和 R 的混合,效果很好
\pval{\Sexpr{format.pval (round (crr_1 $ coef ["gender",]["p-value"], 2), digits = 3, eps = 0.001, nsmall = 3)}}
并产生0.040。
但是,当 format.pval R 函数的结果给出值 <0.001 时,它不起作用并产生以下消息:FP 错误:在浮点数中发现非法字符 <!。
当我使用包发布时遇到了同样的问题,如下例所示。
\pval{\Sexpr{publish (csc_1, print = F) [[2]] $ regressionTable $ p [[1]]}}
如何使用 \FPiflt 函数或其他方式生成 <0.001 的粗体 p 值来规避此问题?
预先感谢您的帮助。
答案1
您可以尝试以下版本。
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\newcommand{\pval}[1]{
\tl_set:Nn \l_tmpa_tl {#1}
\tl_set:Nn \l_tmpb_tl {#1}
% remove all special characters
\regex_replace_all:nnN {[<>=]} {} \l_tmpa_tl
\fp_set:Nn \l_tmpa_fp {\l_tmpa_tl}
\fp_compare:nTF {\l_tmpa_fp <= 0.5} {
\group_begin: \bfseries \tl_use:N \l_tmpb_tl \group_end:
} {
\tl_use:N \l_tmpb_tl
}
}
\ExplSyntaxOff
\begin{document}
\pval{0.8}
\pval{<0.001}
\end{document}
答案2
下面的代码更新为捕获的单元格/参数中\pval
存在的条件。<
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array,collcell}
\usepackage{xfp}
\newcolumntype{P}{>{\collectcell\pval}c<{\endcollectcell}}
\makeatletter
\newcommand\pval[1]{%
\def\pval@{#1}% Store value
% \patchcmd{<cmd>}{<search>}{<replace>}
\patchcmd{\pval@}{<}{}
{\ifnum\fpeval{\pval@ < 0.5}=1
\expandafter\textbf
\fi
{<\pval@}}% <success> - < was present
{\ifnum\fpeval{\pval@ < 0.5}=1
\expandafter\textbf
\fi
{\pval@}}% <failure> - no < present
}
\begin{document}
\begin{tabular}{ | P | }
0.4 \\
0.6 \\
0.1 \\
0.01 \\
0.001 \\
<0.001
\end{tabular}
\end{document}