我有一个LaTeX表(下面是代码片段),它包含每个\ underset之后的两个值(值1:标准错误;值2:估计).我想通过将\ bf {}添加到每个\ underset之后的第二个值进行编辑,只要第二个值除以第一个值大于2或小于-2.
例如,在第一个\ underet之后(在'intercept'之后),-9.686/1.742是<-2,因此我希望原始的{-9.686}读为\ bf {-9.686}.我有数百个变量,因此不首选手动.我只用notepad ++工作,但如果有必要可以尝试Python.有关PC的正则表达式和/或合适平台(编辑器/解析器等)的任何提示都将非常感激.
documentclass[letter]{article}
\usepackage{amsmath, amsthm, amssymb} % Additional math packages
\begin{document}
\begin{table}[hptb]
\begin{center}
\begin{tabular}{|l||c|c|c|c|c|c|c|} \hline
(Intercept)&$\underset{(1.742)}{-9.686}$&$\underset{(0.907)}
{-9.085}$&$\underset{(0.663)}{-9.724}$&$\underset{(0.565)}{-9.077}$&$\underset{(0.619)}
{-7.601}$&$\underset{(0.838)}{-5.273}$&$\underset{(1.120)}{-3.417}$\\
\end{tabular}
\end{center}
\end{table}
\end{document}
Run Code Online (Sandbox Code Playgroud)
我希望输出表读起来像这样.
输出表:
\begin{document}
\begin{table}[hptb]
\begin{center}
\begin{tabular}{|l||c|c|c|c|c|c|c|} \hline
(Intercept)&$\underset{(1.742)}{\bf{-9.686}}$&$\underset{(0.907)}
{\bf{-9.085}}$&$\underset{(0.663)}{-9.724}$&$\underset{(0.565)}{\bf{-
-9.077}}$&$\underset{(0.619)}{\bf{-7.601}}$&$\underset{(0.838)}
{-5.273}$&$\underset{(1.120)}{-1.417}$\\
\end{tabular}
\end{center}
\end{table}
\end{document}
Run Code Online (Sandbox Code Playgroud)
这完全可以在LaTeX中完成......

\documentclass{article}
\usepackage{amsmath,collcell,array}% http://ctan.org/pkg/{amsmathm,collcell,array}
\makeatletter
\def\insertbf@$\underset#1#2${$\underset{#1}{\mathbf{#2}}$}
\newcommand{\insertbf}[1]{\expandafter\insertbf@#1}
\newcolumntype{C}{>{\collectcell\insertbf}c<{\endcollectcell}}
\makeatother
\begin{document}
\begin{table}[hptb]
\centering
\begin{tabular}{|l||*{7}{c|}} \hline
(Intercept) & $\underset{(1.742)}{-9.686}$ & $\underset{(0.907)}{-9.085}$ & $\underset{(0.663)}{-9.724}$
& $\underset{(0.565)}{-9.077}$ & $\underset{(0.619)}{-7.601}$ & $\underset{(0.838)}{-5.273}$
& $\underset{(1.120)}{-3.417}$
\end{tabular}
\bigskip
\begin{tabular}{|l||*{7}{C|}} \hline
(Intercept) & $\underset{(1.742)}{-9.686}$ & $\underset{(0.907)}{-9.085}$ & $\underset{(0.663)}{-9.724}$
& $\underset{(0.565)}{-9.077}$ & $\underset{(0.619)}{-7.601}$ & $\underset{(0.838)}{-5.273}$
& $\underset{(1.120)}{-3.417}$
\end{tabular}
\end{table}
\end{document}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,两个表与使用常规c列规范的顶部表相同,而底部表使用新定义的C列规范.后者拦截\underset修改第二个参数字体的设置.
该collcell包用于捕获列2-8中的每个单元格内容.它们必须与表单完全匹配$\underset{#1}{#2}$才能将其转换为$\underset{#1}{\mathbf{#2}}$.该array包通过新定义的列简化了单元格集合(简化了代码).
有些事情需要注意:
我使用了一个复制列说明符*{<num>}{<col spec>},它<col spec>总共重复列规范<num>.它使代码更具可读性.
使用\mathbf而不是与文本相关\bf.见不要紧,如果我使用\textit或\it,\bfseries或\bf等和威尔两个字母的字体样式命令(\bf,\it,...)曾经在LaTeX的复活?
不要反复复制相同的原始概念,而是定义一个可以使用的宏(参见Consistent typography).通过这种方式,它可以让您了解内容,如果您改变主意,可以轻松操作.例如,
\newcommand{\stderrest}[2]{$\underset{(#1)}{#2}$}% \stderrest{<stderr>}{<est>}
Run Code Online (Sandbox Code Playgroud)
然后\stderrest{<stderr>}{<est>}在任何需要的地方使用这种东西.这样,格式化的更新就像一样简单
\renewcommand{\stderrest}[2]{$\underset{(#1)}{\mathbf{#2}}$}% \stderrest{<stderr>}{<est>}
Run Code Online (Sandbox Code Playgroud)
你完成了
不要使用center浮子内的环境; 而是使用\centering.作为参考,请参阅我应该使用\center或\centering用于数字和表格?
使用\makeatletter... \makeatother对只是因为我定义了一个与您的规范输入相匹配的特定"内部"命令.这不是必要的,可以改变.但是有关这方面的更多信息,请参阅做什么\makeatletter和\makeatother做什么?
如果您在新定义的C列中有一个没有$\underset{#1}{#2}$表单的单元格,则需要使用\multicolumn{1}{c|}{..}它来避免收集它.
...无论如何都要添加一个条件语句,只有
\mathbf在{#2}且仅当且{#2}除以的绝对值{#1}大于2 时才插入if 之前的条件语句?截至目前,它增加了\mathbf每个值{#2}.
对于变量的条件格式,这里有一个选项:

\documentclass{article}
\usepackage{amsmath,collcell,array}% http://ctan.org/pkg/{amsmathm,collcell,array}
\usepackage[nomessages]{fp}% http://ctan.org/pkg/fp
\makeatletter
\let\stderr@format\relax
\def\stripparen@(#1){#1}% Remove parentheses
\def\insertbf@$\underset#1#2${%
\FPabs\resultA{#2}% Absolute value of #2
\edef\resultB{\stripparen@#1}% Extract std err
\FPeval\result{\resultA / \resultB}% Divide est / std err
\FPifgt\result{2}\let\stderr@format\mathbf\fi%
$\underset{#1}{\stderr@format{#2}}$}%
\newcommand{\insertbf}[1]{\expandafter\insertbf@#1}
\newcolumntype{C}{>{\collectcell\insertbf}c<{\endcollectcell}}
\makeatother
\begin{document}
\begin{table}[hptb]
\centering
\begin{tabular}{|l||*{7}{c|}} \hline
(Intercept) & $\underset{(1.742)}{-9.686}$ & $\underset{(0.907)}{-9.085}$ & $\underset{(0.663)}{-9.724}$
& $\underset{(0.565)}{-9.077}$ & $\underset{(0.619)}{-7.601}$ & $\underset{(0.838)}{-5.273}$
& $\underset{(1.120)}{-3.417}$
\end{tabular}
\bigskip
\begin{tabular}{|l||*{7}{C|}} \hline
(Intercept) & $\underset{(1.742)}{-9.686}$ & $\underset{(0.907)}{-9.085}$ & $\underset{(0.663)}{-9.724}$
& $\underset{(0.565)}{-9.077}$ & $\underset{(0.619)}{-7.601}$ & $\underset{(0.838)}{-5.273}$
& $\underset{(1.120)}{-3.417}$
\end{tabular}
\bigskip
\begin{tabular}{|l||*{7}{C|}} \hline
(Intercept) & $\underset{(1.742)}{-2.686}$ & $\underset{(0.907)}{-9.085}$ & $\underset{(0.663)}{-9.724}$
& $\underset{(0.565)}{-9.077}$ & $\underset{(0.619)}{-7.601}$ & $\underset{(0.838)}{-1.273}$
& $\underset{(1.120)}{-3.417}$
\end{tabular}
\end{table}
\end{document}
Run Code Online (Sandbox Code Playgroud)
fp提供定点算术来调节某些变量的值.我确定更新的代码是不言自明的.