0

ラテックスソースをコンパイルするシェルスクリプトを作成しようとしています。次のようなコマンドに含まれている参考文献ファイルの名前を取得したいと思います。

\bibliography{ファイル名}

「ファイル名」をシェル変数に保存する必要があります。これに対する私の解決策(tcshで)はひどく恥ずかしいです:

バイオリオグラフィーを設定=grep -v -E "[[:blank:]]*%[[:blank:]]*" poltheory.tex | grep -E "\\bibliography{[A-Za-z0-9_\.]*}" | tail -1 | sed 's/\\bibliography//' | tr -d { | tr -d } | awk '{print $1}'

これは次のように分類されます。

  1. ラテックスソースにコメント行を表示しない
  2. 有効な参考文献タグを含む行を取得します
  3. 最後のものだけを使用してください(何らかの理由で複数のものが定義されている場合)
  4. 中括弧を取り除く
  5. シェル変数に残されているものを設定します。

確かに、私が見落としているこれを行うためのエレガントな方法があります。すごいですか?私はすでに実用的なコマンドを持っているので、これは単に美しさとシェルの魔法の名の下にあります。

4

1 に答える 1

1

ルール1:常にcshファミリーシェルではなく、Bourneファミリーシェルを使用してシェルスクリプトを記述します。

.auxファイルから情報を取得する方が簡単です。ここでは、bashの追加機能を使用して、ファイル名の末尾から.texを切り取ります。

#!/bin/sh
texfile="$1"
auxfile="${texfile%.tex}.aux"

grep '^.bibdata{' "$auxfile" | sed 's/.*{//;s/}.*//'
于 2010-06-07T01:10:05.457 に答える