在空文件夹中设置模拟

在空文件夹中设置模拟

我将许多表输入到一个 tex 文件中,并想将每个表中的“括号中的标准错误”替换为“我想要的任何东西”。

例子

\documentclass[12pt,a4paper]{article}
\usepackage[UTF8]{ctex}

\begin{document}

\input{table.tex}
\input{table.tex}

\end{document}

表格.tex

\begin{table}[htbp]\centering
\def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\caption{table \label{tab3}}
\begin{tabular}{l*{3}{c}}
\hline\hline
                    &\multicolumn{1}{c}{(1)E}&\multicolumn{1}{c}{(2)W}&\multicolumn{1}{c}{(3)M}\\
\hline
ln$\chi$            &       3.163\sym{***}&       4.133\sym{***}&       2.017\sym{***}\\
                    &     (0.696)         &     (0.451)         &     (0.442)         \\
\hline
FE        &         Y         &         Y         &         Y         \\
N           &        1005         &         980         &         825         \\
R2             &       0.660         &       0.583         &       0.624         \\
\hline\hline
\multicolumn{4}{l}{\footnotesize Standard errors in parentheses}\\
\multicolumn{4}{l}{\footnotesize \sym{*} \(p<0.05\), \sym{**} \(p<0.01\), \sym{***} \(p<0.001\)}\\
\end{tabular}
\end{table}

IDE:Texpad 1.731

引擎:Xelatex、BibTex

答案1

如果您可以选择使用 LuaLaTeX,那么以下示例中显示的方法可能适合您。dosub设置了一个名为 的 Lua 函数来执行字符串替换操作,并提供了 LaTeX 代码来将此函数的操作限制在table环境中。因此,除了环境内部之外可能出现的字符串“括号中的标准错误”实例table将保持不变。

在此处输入图片描述

% !TeX program = lualatex
\RequirePackage{filecontents}
%% create the files 'table1.tex' and 'table2.tex'
\begin{filecontents}{table1.tex}
\begin{table}[htbp]
\centering
\def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\caption{A first table \label{tab1}}
\begin{tabular}{l*{3}{c}}
\hline\hline
&\multicolumn{1}{c}{(1)E}&\multicolumn{1}{c}{(2)W}&\multicolumn{1}{c}{(3)M}\\
\hline
$\ln\chi$ & 3.163\sym{***}& 4.133\sym{***}& 2.017\sym{***}\\
          & (0.696)       & (0.451)       & (0.442)       \\
\hline
FE        &   Y           &   Y           &  Y            \\
N         &  1005         &   980         &   825         \\
R\sym{2}  &  0.660        &   0.583       &   0.624       \\
\hline\hline
\multicolumn{4}{l}{\footnotesize Standard errors in parentheses}\\
\multicolumn{4}{l}{\footnotesize \sym{*} \(p<0.05\), \sym{**} \(p<0.01\), \sym{***} \(p<0.001\)}\\
\end{tabular}
\end{table}
\end{filecontents}

\begin{filecontents}{table2.tex}
\begin{table}[htbp]
\centering
\def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\caption{A second table \label{tab2}}
\begin{tabular}{l*{3}{c}}
\hline\hline
&\multicolumn{1}{c}{(1)A}&\multicolumn{1}{c}{(2)B}&\multicolumn{1}{c}{(3)C}\\
\hline
$\ln\chi$ & 3.163\sym{***}& 4.133\sym{***}& 2.017\sym{***}\\
          & (0.696)       & (0.451)       & (0.442)       \\
\hline
FE        &   Y           &   Y           &  Y            \\
N         &  1005         &   980         &   825         \\
R\sym{2}  &  0.660        &   0.583       &   0.624       \\
\hline\hline
\multicolumn{4}{l}{\footnotesize Standard errors in parentheses}\\
\multicolumn{4}{l}{\footnotesize \sym{*} \(p<0.05\), \sym{**} \(p<0.01\), \sym{***} \(p<0.001\)}\\
\end{tabular}
\end{table}
\end{filecontents}

\documentclass[12pt,a4paper]{article}
%%\usepackage[UTF8]{ctex}
%>>>> --- new code starts here ---
\usepackage{luacode,etoolbox}
\begin{luacode}
function dosub ( s )
return ( string.gsub ( s , "Standard errors in parentheses", 
                           "Anything I want" ) )
end
\end{luacode}
\AtBeginEnvironment{table}{\directlua{ 
   luatexbase.add_to_callback("process_input_buffer", dosub, "dosub" ) }}
\AtEndEnvironment{table}{\directlua{ 
   luatexbase.remove_from_callback("process_input_buffer",  "dosub" ) }}
%<<<< --- new code ends here ---

\begin{document}
\input table1

This instance of ``Standard errors in parentheses'' is not modified.

\input table2
\end{document}

答案2

如果您使用基于 Unix 的系统,我会使用 GNUgrep和 GNU来实现这一点。perl如果您计划替换任意数量的文件中的任意文本,则需要了解如何使用命令行终端。

如果使用基于 DOS 的,您只需安装类似 Babun 的东西即可快速获得最小的 Linux 虚拟机和终端仿真器。

在空文件夹中设置模拟

1. 创建 10 个包含所需字符串的表

for i in $(echo table{01..10}.tex); do touch $i && echo "Standard errors in parentheses & col2 & col3 \\\\" > $i;done

2. 使用正则表达式(Perl 方言)递归列出匹配项(用于检查)

grep -Prn 'Standard errors in parentheses'

3.使用 Perl 和 Grep 的输出递归替换文本

perl -i -pe 's/Standard errors in parentheses/whatever/g' $(grep -Prl 'Standard errors in parentheses')

笔记

如果您想在写入文件之前确保替换正常工作,您可以写入终端。

perl -pe 's/Standard errors in parentheses/whatever/g' $(grep -Prl 'Standard errors in parentheses')

或者使用扩展名 .bak 保存备份

perl -i.bak -pe 's/Standard errors in parentheses/whatever/g' $(grep -Prl 'Standard errors in parentheses')

我已经专业地处理大型文本好几年了,并且尝试过不同的正则表达式语言方言。根据我的经验,Perl 是最有用和最受接受的方言。

  • 前瞻和回顾非常有用
  • 非贪婪运算符(驯服占位符,例如*?)想要查找所有 s 的内容\paragraph{...},但其他一些\macro{}可能在同一行。只需键入grep -Prn '\\paragraph\{.*?\}'即可在第一个 处停止}

相关内容