urlbstコマンドの使い方
latexでbibtexを使っていると,参考文献一覧にhyperlinkを付けたくなるが,BibTeXのエントリーのurlにurlを指定しても自動でリンクは貼ってくれない.リンクを貼る方法は3つほどあり,
- BibTeXファイルの文献種類を@miscにして
url = {http://hogehoge.com/hige...}
のように登録する. - BibTeXファイルに直接hyperref.styの
\href
コマンドを記述する - urlbstコマンドを用いて,bitexスタイルファイルを書き換える
1の方法だと,すべてmiscしなくてはいけなくなる上,urlがそのまま表示されてしまう.pdfをpc上で表示させるときは文献タイトル自体にリンクを貼った方が見栄えが良い.そこで,2の方法を使うのだが,これだと手間が増えてendnoteやMendeley Desktopなどの論文管理ソフトを使っていると困難になる.そこで,次に説明する3の方法が必要になる.
bibtexを使うときは,\bibliographystyle{}
コマンドを使って,unsrt,junsrt,jplainなどのスタイルファイルを指定しているが,このスタイルファイル自体を書き換えてしまうコマンドである.
元のファイルが消えてしまうと困るので以下のようにコマンドを打つ.
#!/bin/bash sudo chmod a+w /usr/local/texlive/texmf-local/bibtex/bst/local/ #書き込み権限付与 urlbst --eprint --doi --inlinelinks --hyperref /usr/local/texlive/2014/texmf-dist/pbibtex/bst/jplain.bst /usr/local/texlive/texmf-local/bibtex/bst/local/jplain_url.bst urlbst --eprint --doi --inlinelinks --hyperref /usr/local/texlive/2014/texmf-dist/pbibtex/bst/junsrt.bst /usr/local/texlive/texmf-local/bibtex/bst/local/junsrt_url.bst sudo mktexlsr
第一引数が元のスタイルファイルで,第二引数が変換後のスタイルファイル.変換後のものはtexmf-local内につくる.変換後のファイル名は自由に設定できるが,今回は「junsrt_url.bst」などと元のファイル名に"_url"を追加したファイル名にした.latex内では
\bibliographystyle{junsrt_url}
などとするだけで,文献のタイトル部分にリンクが貼られる.
【初心者向け】パスの通し方
「パスを通す」とは、プログラムを簡単に実行するために、プログラムの置いてあるディレクトリを指定する作業である。
例えば、よく使う「cd」というコマンドは「/usr/bin/」というディレクトリに置いてあるので、
$/usr/bin/cd
と打てば「cd」コマンドは実行できる。しかし、毎回このようにフルパスで指定するのは面倒なので、「cd」と打つだけで実行できるようにパスが設定されている。このパスは
$echo $PATH
と打てば表示できる。これに例えば「/opt/local/bin」というパスを追加したければ、
$export PATH="/opt/local/bin:$PATH"
と打てば追加できる。本来の「パスを通す」という作業はこれで終わりだが、パスというのはターミナルを起動(正確にはbashというshellを起動)するたびに再読み込みされてしまうので、自分で追加したパスは起動のたびに設定しなければならない。それを解消するには、shellが起動するときに自動的に読み込むファイルに記載しておけばよい。そのファイルはユーザーのホームディレクトリにあり、「.profile」または「.bash_profile」という名前がついているので、
$cd ~ $ls $nano .profile(または$nano .bash_profile)
としてこのファイルの一番下に
export PATH="/opt/local/bin:$PATH"
を追加し、「ctrl-o」「Return」で保存、「ctrl-x」でファイルを閉じればよい。
こうしてbashを再起動すると、.profile に書かれたコマンドが自動的に実行されて、自動的に「パスが通る」ようになる。
ちなみに、この「.profile」ファイルにはパスの設定に限らず、任意のコマンドを書いておけるので、いろいろ使えそう。
gnuplotで複数グラフを書くときのファイル名の省略方法
#data.dat 0.1 0.1 1.0 0.2 0.2 0.9 0.3 0.3 0.8 :
みたいに3列以上のファイルから1と2、1と3列目をセットにしてプロットする場合、普通は
plot "data.dat" u 1:2, "data.dat" u 1:3
とするが
plot "data.dat" u 1:2, "" u 1:3
のようにファイル名が省略できる。
bash上のエスケープ
プログラム上で制御文字として扱われる文字を出力するためには、それをエスケープする(制御文字として機能させない)ことが必要。
bashの場合のメモ。
#!/bin/bash name="snoopy" echo "My name is ${name}" # ダブルクオーテーション(”)の中に書いた変数は変数の中身が表示される echo 'My name is ${name}' # シングルクオーテーション(’)の中に書いた変数は展開されないので、そのまま${name} と表示されてしまう。 echo "\$name は変数を意味する" # ダブルクオーテーションの中であっても、バックスラッシュ(\)を前に付ければ$マークなどがそのまま出力される
実行結果
My name is snoopy My name is ${name} $name は変数を意味する
bash scriptのつまづきやすいポイント・コツ
bashでシェルスクリプトを書くと、通常の言語と違う(?)部分があって困ったのでメモ。
まず、変数への代入はイコールの前後にスペースは空けてはいけない。
#!/bin/bash hoge=273 #これはOK hage = 273 #これはエラー
if文は実はtestコマンド(の省略形)を使っているので、通常の言語と異なった書き方。
詳しくは以下のサイトを参照。
たとえばこのように書く。if文の括弧[]と条件式の間にはスペースを入れないとエラーが起きるので注意。
#!/bin/bash hoge="snoopy" if [ ${hoge} = "snoopy" ]; then #括弧[]と条件式の間にはスペースをあけないといけない! echo "真です" else echo "偽です" fi #if文終了の合図 if [ ${hoge} -ne "snoopy" ]; then #-neオプションはtestコマンドのノットイコールの意味 echo "snoopyではない" else echo "snoopyです" fi
よく使うのは、各引数についてループさせ、それぞれファイルかどうか判定して処理をするようなやつ。
#hoge.sh #!/bin/bash for i in $@ #「$@」はこのscriptのすべての引数を配列として表す。各引数についてループ do # for文のループゾーンの開始点を明記 if [ -f $i ] # 引数 $i がファイルかどうか then echo "$i is a file." : 処理 : fi done #forループ終了
これをhoge.shとして保存したら、ターミナル上で例えば
$ ./hoge.sh *.txt
とすれば、なんとか.txt というファイルを引数として読み込む。
$ ./hoge.sh hoge*
とすれば、hogeで始まるファイルやフォルダを引数として指定。フォルダを指定してしまっても弾かれるワケ。
gnuplotでlatex数式を埋め込んできれいな図を作る方法
gnuplotからtikzとして出力してpdflatexで処理すると高画質なグラフが手に入る。もちろんlatexの美しい数式が使える。
set term tikz createstyle #gnuplot用のlatex styleファイルを同じフォルダに出力 set term tikz standalone size 5in,3in #standalone指定でそのままpdflatexで処理できる set output "hoge.tex" #拡張子はtexにする set xlabel "$x$" #ドルマークで囲めば数式として出力できる set ylabel "$\\theta$" #バックスラッシュ( \ )はgnuplot上で意味を持つので、エスケープさせるために二つ書く
gnuplot上で動かすならこれで良いが、shellscriptからgnuplotを動かしてtikzに出すとき、バックスラッシュ " \ " を二重でエスケープしないといけない。
例)hoge.sh
#!/bin/bash gnuplot <<EOF set term tikz createstyle #gnuplot用のlatex styleファイルを同じフォルダに出力 set term tikz standalone size 5in,3in #standalone指定でそのままpdflatexで処理できる set output "hoge.tex" #拡張子はtexにする set xlabel "$x$" #ドルマークで囲めば数式として出力できる set ylabel "$\\\\theta$" #バックスラッシュ( \ )をshell script上でエスケープさせるには \\ と二つ入力すれば良いが、gnuplot上でも二つ書いてエスケープしないといけないので、"\"を1つ表示させるためには4つ書く必要がある plot sin(x) w lp #関数をプロット EOF
いずれにせよ、こうすると一群のスタイルファイル
gnuplot-lua-tikz-common.tex
gnuplot-lua-tikz.sty
gnuplot-lua-tikz.tex
とグラフを記述した
hoge.tex
というファイルが出力されるので
$pdflatex hoge.tex
と処理すればpdfファイルが得られる。
ただし、pm3d mapなどを使うと異常に重くなるのでgnuplotから直接pngで出力するのが良さそう。