2013-08-03 120 views
4

我有一個LaTeX表(下面是片段),其中包含兩個值(值1:標準錯誤;值2:估計)在每個\ underset之後。我想通過在每個\ underset後面加上\ bf {}到第二個值,只要第二個值除以第一個值大於2或小於-2。正則表達式來編輯乳膠表

例如,在第一個\ underset(在'intercept'之後)-9.686/1.742是< -2之後,因此我希望原始的{-9.686}讀爲\ bf {-9.686}。我有數百個變量,所以手動通過不是首選。我只用記事本+ +工作,但可以在必要時嘗試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} 

我希望輸出表能像這樣讀取。

輸出表:

\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} 
+0

你已經可以忘掉記事本++ –

回答

1

與Python一個例子:

#!/usr/bin/python 

import re 

data = r'''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}''' 

print re.sub(r'(\\underset{\()(-?[0-9]+(?:\.[0-9]+)?)(\)}\s*{)(-?[0-9]+(?:\.[0-9]+)?)(?=}\$)', 
    lambda m: m.group(1)+m.group(2)+m.group(3)+'\\bf{'+m.group(4)+'}' 
     if abs(float(m.group(4))/float(m.group(2)))>2 else m.group(0), data) 

總之,這個想法是捕獲兩個值傳遞到用於比較的絕對值lambda函數商數爲2並返回修改後的字符串或整個匹配。

5

這可以完全在膠乳做...

enter image description here

\documentclass{article} 
\usepackage{amsmath,collcell,array}% http://ctan.org/pkg/{amsmathm,collcell,array} 
\makeatletter 
\def\[email protected]$\underset#1#2${$\underset{#1}{\mathbf{#2}}$} 
\newcommand{\insertbf}[1]{\expandafter\[email protected]#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} 

在上述例子中,兩個表與使用常規c -column說明書中上面的一個是相同的,而最下面的一個使用新定義的C-列規範。後者攔截\underset的設置來修改第二個參數的字體。

collcell package用於捕獲2-8列中每個單元格的內容。它們必須與$\underset{#1}{#2}$表格完全匹配,以便它可以轉換爲$\underset{#1}{\mathbf{#2}}$array package通過新定義的列簡化了細胞收集(簡化了代碼)。

需要注意以下幾點:


...反正是有增加一個條件語句,只有插入\mathbf之前{#2}當且僅當由{#1}除以{#2}絕對值大於2?截至目前,它將\mathbf添加到{#2}中的每個值。

對於可變的條件格式,這裏是一個選項:

enter image description here

\documentclass{article} 
\usepackage{amsmath,collcell,array}% http://ctan.org/pkg/{amsmathm,collcell,array} 
\usepackage[nomessages]{fp}% http://ctan.org/pkg/fp 
\makeatletter 
\let\[email protected]\relax 
\def\[email protected](#1){#1}% Remove parentheses 
\def\[email protected]$\underset#1#2${% 
    \FPabs\resultA{#2}% Absolute value of #2 
    \edef\resultB{\[email protected]#1}% Extract std err 
    \FPeval\result{\resultA/\resultB}% Divide est/std err 
    \FPifgt\result{2}\let\[email protected]\mathbf\fi% 
    $\underset{#1}{\[email protected]{#2}}$}% 
\newcommand{\insertbf}[1]{\expandafter\[email protected]#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} 

fp提供定點算術對某些變量的值的條件。我相信更新的代碼是不言自明的。

+0

這真是太好了,是否有添加一個條件語句,只在{#2}之前插入\ mathbf當且僅當{#2}的絕對值除以{#1 }大於2? –

+0

截至目前,它將\ mathbf添加到{#2}中的每個值。謝謝。 –

+0

@AnthonyHowell:查看最新的答案。 – Werner