修正ログ
- 2019/12/16 1. に
while
文を書くことを追記。(現時点で4.まで書いた。)
これは何?
LaTeXで文章(多分論文)を書くときにあるといいな、というshellスクリプトを書いていきます。みなさん執筆頑張りましょう。
1. 文献情報の人名をまとめて修正する
おなじみの文献ソフトMendeleyを使って、Mendeleyに入っている文献情報を.bibに同期していくことが出来ます。Mendeley中のcitation keyをLaTeXの文中に \cite{CITATION_KEY}
として埋め込むと良いです。
しかし、落とし穴がありまして、Mendeley側で文献を更新すると、
García
さんとかMuñoz
さんのアクセント/アクサンテギュやティルデがおかしなことになります。そこで以下のスクリプトで、毎回直してあげましょう。下記の例では./res/library.bib
にMendeleyと同期されている.bib
ファイルを置き、スクリプトは./bin/
フォルダにまとめることにしています。
#!/usr/bin/sh
sed -i "s/é/\\\'{e}/g" ./res/library.bib
sed -i "s/á/\\\'{a}/g" ./res/library.bib
sed -i "s/ó/\\\'{o}/g" ./res/library.bib
sed -i "s/ñ/\\\~{n}/g" ./res/library.bib
このbibtex修正スクリプトを毎回手動で実行するのもめんどくさい!という場合には以下のようにwhile
文で3分おき実行を仕掛けておきましょう。
# bash dayo
$ three_mins=180; # sleep関数には秒数を投げます。3分=180秒を指定。
$ while true; do ./bin/correct_bibtex.sh; sleep $three_mins; done
# やめるときは `ctrl+c`
2. タイポ絶対○すマン
$ grep $TYPE_STRING *.tex --color # タイポを色付けして表示
$ grep $TYPE_STRING *.tex | head | grep $TYPE_STRING --color # タイポを頭出しして色付け表示
grep
に-n
オプション付けると文字列がヒットした行の行数も示すので、おすすめです。
3. 大文字2文字以上の単語を取ってきてabbreviation listを作る
Nomenclatureとも呼ばれますね、索引です。大文字の略語に正式名称をふる作業で、目視すると抜け漏れが出そうなので機械的にやりましょう。以下のpythonスクリプトを書いて、$ ./bin/list_capitals.py *.tex
などとすれば、全ファイル中に含まれる2文字以上大文字が連なる単語を引っ張ってこれます。
#!/usr/bin/python
import sys;
import re;
fn=sys.argv[1];
f=open(fn,"r",encoding="UTF-8");
lines=f.readlines();f.close();
sent="".join(lines);
g=re.finditer("[A-Z]{2,}",sent);
print(*[c.group() for c in g])
注意点
- ファイルの文字コードには気をつけてください。上記の例ではUTF-8を指定しています。
- 文字数の制約も自分でしましょう。下から2行目の{2,}
という箇所で指定しています。
4. 目次を作る
FILENAME.tex
をコンパイルするとき、FILENAME.toc
というファイルが作られます。このことを利用して、FILENAME.toc
のリストから文字列だけ取り出すスクリプトを書けば、目次が秒で作成できます。スクリプトは以下のようになります。awk
コマンドという、各行に同じ処理を適用するコマンドが便利です。
$ cat ./bin/list_toc.sh
#!/usr/bin/sh
awk -F\} '{print $2,$3}' main.toc | awk -F\{ '{print $3}'