LaTeX のコンパイルを自動化するスクリプト - ドラフト版のバージョン情報・タイムスタンプも
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