Настроить симуляцию в пустой папке

Настроить симуляцию в пустой папке

Я ввожу много таблиц в 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 является для вас вариантом, то вам может подойти подход, показанный в следующем примере. Функция Lua, названная dosub, настроена для выполнения операций подстановки строк, а код 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

Я бы использовал GNU grepи GNU perlдля этого, если вы используете систему на базе Unix.Если вы планируете заменить произвольный текст в произвольном количестве файлов, вам понадобятся навыки работы с терминалом командной строки.

Если вы используете 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 — самый полезный и принятый диалект.

  • взгляды вперед и назад, которые чрезвычайно полезны
  • нежадный оператор (укрощение заполнителей, например, *с помощью ?)). Вы хотите найти содержимое всех \paragraph{...}s, но некоторые другие \macro{}могут находиться на той же строке. Просто введите , grep -Prn '\\paragraph\{.*?\}'чтобы остановиться на первом }.

Связанный контент