Latex [オプション] パッケージのペア形式を \usepackage[オプション]{パッケージ}として指定

Latex [オプション] パッケージのペア形式を \usepackage[オプション]{パッケージ}として指定

現在よく使用されているデフォルトのLaTeXパッケージセットは、次の形式になっています。

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

パッケージに追加のオプションがあるかどうかに応じて、これを \usepackage[options]{package} または \usepackage{package} の標準 LaTeX 表記法に変換できるようにしたいです。オプションの行を変換するためにsed / regexコマンドを正常に作成しましたが、オプションのないパッケージがありません。

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

パッケージが1つしかない行で実行すると、期待どおりに失敗します。

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

正規表現の問題ですか?では、どのように処理する必要がありますか?

答え1

これがあなたに適していることを確認してください:

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

行の先頭に一致する.*ように置き換え、角かっこをオプションにするために追加しました。^\?

答え2

この2段階のアプローチはより簡単に見えます。

$ printf '%s\n' 'package1' '[options]package2' | sed -e 's/[^]]*$/{&}/' -e 's/^/\\usepackage/'
\usepackage{package1}
\usepackage[options]{package2}
  • 最初のステップは、行の最後までをs/[^]]*$/{&}/除いて、可能な限り長い文字列を一致させて]プロジェクト名を中かっこ内に入れることです。
  • 2番目のステップでは、行の先頭にs/^/\\usepackage/追加するだけです。\usepackage

関連情報