如何有条件地以粗体显示带有符号

如何有条件地以粗体显示带有符号

我有通过 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}

相关内容