These search terms have been highlighted:[bash]
2010-01-22
LaTeX のコンパイルを, jbibtex のコンパイルも含めて(自動的に判断される),自動化するスクリプトを書いた.また,昨日の記事 作成時刻やバージョン情報を PDF にスタンプする を使って,バージョン情報,リビジョン情報,タイムスタンプなどをドラフトバージョンに付加できるようにした.
使い方 †
ソースは後述.
qlatex hoge.tex
でふつうに hoge.tex をコンパイル. hoge.dvi, hoge.ps, hoge.pdf が生成される.リビジョン番号は1インクリメントされる.
qlatex hoge.tex -d
でドラフト版コンパイル.リビジョン番号は1インクリメントされる.hoge.pdfの左上に paperid (paperid.dat に保存されている),中央上にタイムスタンプ,右上にバージョン情報 (version.dat と revision.dat に保存されている. revision.dat の数字は読み込んでからインクリメントされる) をそれぞれ表示する.
qlatex hoge.tex -d -v 3
バージョンを 3 に変更し,コンパイル.リビジョン番号はゼロにリセットされる.
qlatex hoge.tex -d -v++
バージョンを1だけインクリメントし,コンパイル.リビジョン番号はゼロにリセットされる.
qlatex hoge.tex -d -pid 'HATEDA'
paperid を 'HATEDA' に変更し,コンパイル. '\begin{large}HATEDA\end{large}' みたいに, LaTeX のコマンドが使える.
この情報は paperid.dat に保存されて,次回からは -pid を指定しなくても自動で読み込まれる.
qlatex †
#!/bin/bash
usage="`basename $0` OPTIONS INPUT_FILENAME
OPTIONS:
[-p PAGE_SIZE]()
[-d] : draft version
[-v++] : increment VERSION (saved to version.dat)
[-v VERSION] : assign VERSION (saved to version.dat)
[-pid PAPER_ID] : assign PAPER_ID (saved to paperid.dat)
[--] : terminate to parse option
[-help] : show help"
#--------------------------------------------------
src=''
opt_dvips=''
opt_dvipdfmx=''
draft=0
if [ -f version.dat ];then
version=`head -n1 version.dat`
else
version=0
fi
if [ -f revision.dat ];then
revision=`head -n1 revision.dat`
revision=$((revision+1))
else
revision=0
fi
if [ -f paperid.dat ];then
paperid="`cat paperid.dat`"
else
paperid=''
fi
#--------------------------------------------------
while true; do
case "$1" in
# -i) src="$2"; shift 2 ;;
-p)
opt_dvips="-t $2"
opt_dvipdfmx="-p $2"
shift 2 ;;
-d) draft=1; shift ;;
-help|--help) echo "usage: $usage"; exit 0 ;;
-v++) version=$((version+1)); revision=0; shift 1 ;;
-v) version=$2; revision=0; shift 2 ;;
-pid) paperid=$2; shift 2 ;;
''|--) shift; break ;;
*)
if [ -z "$src" ];then
src=$1
shift 1
else
echo "unexpected option '$1'" >&2
echo ''
echo "usage: $usage"
exit 1
fi
;;
esac
done
if [ -z "$src" ];then
echo "error! specify the INPUT_FILENAME."
echo ''
echo "usage: $usage"
exit 1
fi
#--------------------------------------------------
fname=`echo ${src} | sed 's/\(.\+\)\(\..\{1,10\}$\)/\1/'`
fps="${fname}.ps"
faux="${fname}.aux"
fdvi="${fname}.dvi"
fpdf="${fname}.pdf"
bibtexcmd=jbibtex
if platex ${src}; then
biberr=0
if [ `grep 'citation' ${faux} | wc -l` -gt 0 ]; then
if ! ( $bibtexcmd ${fname} && platex ${src} ) then
biberr=1
# exit 1
fi
fi
if platex ${src}; then
echo "generated: "${fdvi}
if dvips ${opt_dvips} -o ${fps} ${fdvi}; then
echo "generated: "${fps}
else
echo "error in generating ${fps}"
exit 1
fi
if dvipdfmx ${opt_dvipdfmx} -o ${fpdf} ${fdvi}; then
echo "generated: "${fpdf}
else
echo "error in generating ${fpdf}"
exit 1
fi
fi
if [ $biberr -ne 0 ];then
echo "error in ${bibtexcmd}. check ${fname}.blg"
fi
else
exit 1
fi
#--------------------------------------------------
echo $version > version.dat
echo "version is saved to version.dat: $(cat version.dat)"
echo $revision > revision.dat
echo "revision is saved to revision.dat: $(cat revision.dat)"
echo $paperid > paperid.dat
echo "paperid is saved to paperid.dat:"
cat paperid.dat
if [ $draft -eq 1 ];then
tmpfile1=/tmp/qlatex_version_$$.pdf
tmpfile2=/tmp/qlatex_date_$$.pdf
tmpfile3=/tmp/qlatex_pid_$$.pdf
tmpfile4=/tmp/qlatex_draft_$$.pdf
pdfstamp -t "\begin{Large}ver. $version.$revision\end{Large}" -p rt -f -o $tmpfile1
pdfstamp -t "`date -R`" -p ct -f -o $tmpfile2
pdfstamp -t "$paperid" -p lt -f -o $tmpfile3
pdftk ${fpdf} stamp $tmpfile1 output - \
| pdftk - stamp $tmpfile2 output - \
| pdftk - stamp $tmpfile3 output $tmpfile4
mv -v $tmpfile4 ${fpdf}
rm $tmpfile1
rm $tmpfile2
fi