
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 dosub
wird 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 table
Instanzen der Zeichenfolge „Standardfehler in Klammern“, die außerhalb von Umgebungen auftreten können, unberührt.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}
Antwort2
Ich würde hierfür GNU grep
und GNU verwenden, wenn Sie ein Unix-basiertes System verwenden.perl
Sie 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}
.