Setup-Simulation in leerem Ordner

Setup-Simulation in leerem Ordner

Ich gebe viele Tabellen in eine Tex-Datei ein und möchte in jeder Tabelle „Standardfehler in Klammern“ durch „Alles, was ich möchte“ ersetzen.

Beispiel

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

\begin{document}

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

\end{document}

Tabelle.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

Motor: Xelatex, BibTex

Antwort1

Wenn die Verwendung von LuaLaTeX für Sie eine Option ist, kann der im folgenden Beispiel gezeigte Ansatz für Sie funktionieren. Eine Lua-Funktion namens dosubwird eingerichtet, um die Zeichenfolgensubstitutionsoperationen auszuführen, und es wird LaTeX-Code bereitgestellt, um die Ausführung dieser Funktion auf Umgebungen zu beschränken . Daher bleiben tableInstanzen der Zeichenfolge „Standardfehler in Klammern“, die außerhalb von Umgebungen auftreten können, unberührt.table

Bildbeschreibung hier eingeben

% !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}

Antwort2

Ich würde hierfür GNU grepund GNU verwenden, wenn Sie ein Unix-basiertes System verwenden.perlSie müssen mit dem Befehlszeilenterminal vertraut sein, wenn Sie beliebigen Text in einer beliebigen Anzahl von Dateien ersetzen möchten.

Wenn Sie ein DOS-basiertes System verwenden, können Sie einfach etwas wie Babun für eine schnelle, minimale virtuelle Linux-Maschine und einen Terminalemulator installieren.

Setup-Simulation in leerem Ordner

1. Erstellen Sie 10 Tabellen mit der gewünschten Zeichenfolge

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

2. Verwenden Sie reguläre Ausdrücke (Perl-Dialekt) rekursiv, um Übereinstimmungen aufzulisten (zu Überprüfungszwecken).

grep -Prn 'Standard errors in parentheses'

3. Text rekursiv ersetzen mit Perl und Ausgabe von Grep

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

Anmerkungen

Wenn Sie sicherstellen möchten, dass der Ersatz ordnungsgemäß funktioniert, bevor Sie in Dateien schreiben, können Sie in das Terminal schreiben.

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

oder speichern Sie ein Backup mit der Erweiterung .bak

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

Ich arbeite seit mehreren Jahren beruflich mit großen Texten und habe mit verschiedenen Dialekten von regulären Ausdrücken experimentiert. Meiner Erfahrung nach ist Perl der nützlichste und am weitesten verbreitete Dialekt.

  • Vorausschauende und rückblickende Ansichten, die äußerst nützlich sind
  • nicht-gieriger Operator (Zähmung der Platzhalter wie *zB ?). Sie möchten den Inhalt aller s finden, \paragraph{...}aber es könnten sich noch andere \macro{}in der gleichen Zeile befinden. Geben Sie einfach ein, grep -Prn '\\paragraph\{.*?\}'um beim ersten zu stoppen }.

verwandte Informationen