Configurar simulación en carpeta vacía

Configurar simulación en carpeta vacía

Ingreso muchas tablas en un archivo tex y quiero reemplazar "Errores estándar entre paréntesis" en cada tabla con "Cualquier cosa que quiera".

ejemplo

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

\begin{document}

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

\end{document}

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

Respuesta1

Si usar LuaLaTeX es una opción para usted, seguir el enfoque que se muestra en el siguiente ejemplo puede funcionar para usted. dosubSe configura una función Lua, denominada , para realizar las operaciones de sustitución de cadenas, y se proporciona código LaTeX para limitar la operación de esta función a tablelos entornos. Por lo tanto, las instancias de la cadena "Errores estándar entre paréntesis" que puedan ocurrir fuera de tableentornos internos no se modifican.

ingrese la descripción de la imagen aquí

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

Respuesta2

Usaría GNU grepy GNU perlpara esto si estás usando un sistema basado en Unix.Necesitará conocer la terminal de línea de comandos si planea reemplazar texto arbitrario en una cantidad arbitraria de archivos.

Si utiliza un sistema basado en DOS, puede instalar algo como Babun para obtener una máquina virtual Linux mínima y rápida y un emulador de terminal.

Configurar simulación en carpeta vacía

1. Cree 10 tablas con la cadena deseada

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

2. Utilice expresiones regulares (dialecto Perl) de forma recursiva para enumerar coincidencias (con fines de inspección)

grep -Prn 'Standard errors in parentheses'

3. Reemplazar texto de forma recursiva usando Perl y salida de Grep

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

Notas

Si desea asegurarse de que el reemplazo funcione correctamente antes de escribir en archivos, puede escribir en la terminal.

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

o guardar copia de seguridad con extensión .bak

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

Llevo varios años trabajando profesionalmente con textos extensos y he experimentado con diferentes dialectos de lenguajes de expresión regular. Según mi experiencia, Perl es el dialecto más útil y aceptado.

  • mirar hacia adelante y hacia atrás, que son extremadamente útiles
  • operador no codicioso (dominando los marcadores de posición como, por ejemplo, *con ?)Desea encontrar el contenido de todos \paragraph{...}los s, pero es posible que haya otros \macro{}en la misma línea. Simplemente escriba grep -Prn '\\paragraph\{.*?\}'para detenerse en el primero) }.

información relacionada