Latex [option]packageペアを\usepackage[option]{package}にフォーマットする

Latex [option]packageペアを\usepackage[option]{package}にフォーマットする

現在、私が頻繁に使用するデフォルトの 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}

これをパッケージのみの行で実行すると、失敗します (予想どおり)。

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行の先頭に追加されます。

関連情報