Verwenden Sie sed im Bash-Skript, um LaTeX-Aliase zu ersetzen

Ich bin relativ neu im Bash-Scripting und habe keine Erfahrung mit LaTeX. Ich wurde gebeten, ein Skript zu entwickeln, das die praktischen Verknüpfungen in LaTeX-Dokumenten durch die umständlicheren Langform-Entsprechungen ersetzt.

isher bestand mein Ansatz darin, sowohl die Abkürzung als auch die Langform in getrennten Variablen zu isolieren und dann zu versuchen, sie im Text durch sed zu ersetzen. Ich habe unten kurze Beispieldateien angehängt.

Wie es derzeit der Fall ist, benötigt das Skript zwei Argumente, einen Ausdruck, aus dem die Abkürzungen und die Langform-Terminologie abgerufen werden, und eine Datei, an der die entsprechenden Änderungen vorgenommen werden sollen. Ich weiß, dass das Skript sowohl die Shortcuts als auch die Longforms richtig isoliert und zurückgeben kann, aber es scheint den sed-Befehl nicht auszuführen.

Ich habe versucht, dies online zu durchsuchen, und mehrere ähnliche Fragen gefunden, bei denen der Vorschlag lautete, dass sed Variablen nur schwer erkennt und dass verschiedene Arten von Zitatkombinationen das Problem möglicherweise lösen. Ich habe viele Permutationen ausprobiert und keine scheint zu funktionieren. Die Langform-Terminologien enthalten in vielen Fällen Sonderzeichen wie '!$3$!#39; und '{}'. Ich vermute, dass dies das Problem sein könnte, bin mir aber nicht sicher. Ich bin auch sehr offen für andere Ideen zur Lösung des Problems. Nachfolgend finden Sie Beispiele sowohl für das Skript als auch für die beiden Argumentdateien expr und infile.

expr-Datei mit Verknüpfungen und Langformen

% a
\newcommand{\ao}{$^{18}$O}
\newcommand{\aodso}{$^{18}$O/$^{16}$O}
% b
\newcommand{\bea}{\begin{equation}}
\newcommand{\beaa}{\begin{eqnarray}}
% c
\newcommand{\cthree}{C$_3$}
\newcommand{\cfour}{C$_4$}
\newcommand{\coz}{CO$_2$}

infile mit Verknüpfungen, die durch Langformen ersetzt werden sollen

This is my test {\ao} 
{\aodso} my test is this
Does it work {\bea}
{\beaa} test test test
work work work {\cthree}
{\cfour} This is my test
my test is this {\coz}

Relevanter Unterabschnitt des Skripts, der mit expr und infile als Argumente aufgerufen wird

while read line; do
    if [[ $line == \newcommand* ]]; then
    temp=${line#*\{}
    sc=${temp%%\}*} 
    templf=${temp#*\{}
    lf=${templf%\}}
    #echo $sc, $lf
    sed -i -e 's/${sc}/${lf}/g' ${infile}
    fi
done < ${expr}

UPDATE: Zur Verdeutlichung wäre dies das gewünschte Ergebnis. Die in infile vorhandenen Verknüpfungen würden durch die entsprechende Langform ersetzt.

This is my test {$^{18}$O}
{$^{18}$O/$^{16}$O} my test is this
Does it work {\begin{equation}}
{\begin{eqnarray}} test test test
work work work {C$_3$}
{C$_4$} This is my test
my test is this {CO$_2$}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage