Formatieren Sie Latex [Option]Paketpaare in \usepackage[Option]{Paket}

Formatieren Sie Latex [Option]Paketpaare in \usepackage[Option]{Paket}

Ich habe derzeit eine Reihe von Standard-LaTeX-Paketen, die ich häufig verwende und die wie folgt formatiert sind:

package1
[options]package2
[options]package3
package4
...

Ich möchte dies in die Standard-LaTeX-Notation \usepackage[options]{package} oder \usepackage{package} konvertieren können, je nachdem, ob das Paket zusätzliche Optionen hat. Ich habe erfolgreich einen sed/regex-Befehl erstellt, um die Zeilen mit Optionen zu konvertieren, aber er vermisst die Pakete ohne Optionen.

echo "[option]package" | sed 's/.*\(\[[^]]*\]\)\(.*\)/\\usepackage\1{\2}/'
>> \usepackage[option]{package}

Wenn dies in einer Zeile mit nur einem Paket ausgeführt wird, schlägt es (wie erwartet) fehl.

echo "package" | sed 's/.*\(\[[^]]*\]\)\(.*\)/\\usepackage\1{\2}/'
>> package

Handelt es sich hierbei um ein Regex-Problem und wenn ja, wie gehe ich damit um?

Antwort1

Bitte überprüfen Sie, ob dies für Sie funktioniert:

$ echo -e "[options]package3\npackage4" | sed 's/^\(\[[^]]*\]\)\?\(.*\)/\\usepackage\1{\2}/'
\usepackage[options]{package3}
\usepackage{package4}

Ich habe es .*durch ersetzt ^, damit es dem Zeilenanfang entspricht, und hinzugefügt, \?damit die Klammern optional sind.

Antwort2

Dieser zweistufige Ansatz scheint einfacher zu sein:

$ printf '%s\n' 'package1' '[options]package2' | sed -e 's/[^]]*$/{&}/' -e 's/^/\\usepackage/'
\usepackage{package1}
\usepackage[options]{package2}
  • Der erste Schritt, s/[^]]*$/{&}/, setzt den Projektnamen in geschweifte Klammern, indem er die längstmögliche Zeichenfolge außer ]bis zum Ende der Zeile abgleicht.
  • Der zweite Schritt, s/^/\\usepackage/, wird einfach \usepackagedem Zeilenanfang vorangestellt.

verwandte Informationen