LaTeXを1発でコンパイルするコマンドを作った


LaTeXを1発でコンパイルしたい!!!!!

CSGAdventCalendarの24日目です!!もう4回目ですね,張り切っていきましょう.
明日でラストです!

はじめに

私はplatex環境でtexをコンパイルしているのですが,とにかくタイプセットしてコンパイルってコマンド三回するのがめんどくさい...

なら1発でコンパイルできるコマンド作るっきゃねえだろ????????

要件定義

・LaTeXのコンパイルを一つのコマンド
・ログファイルは残さない
・ls等のコマンドのようにどこからでも使える
・カレントディレクトリに対して行う

環境

・MacOS High Shierra 10.13.6
.Python3.6.5

ながれ

1.まずは自作コマンドを格納するフォルダを作成します

mkdir ~/Tools
Toolsを作業ディレクトリとします
(作るコマンドを保管する場所をわかりやすくするための処理なので好きなディレクトリで作業してもらって構わないです)

2.command.pyの作成

実行される本体となるcommand.pyを作成していきます

command.py
#coding:utf-8
import subprocess
import sys
args = sys.argv

file = args[1]

cut_file = file.split('.')
platex = 'platex ' + cut_file[0] + '.tex'
dvipdfmx = 'dvipdfmx ' + cut_file[0] + '.dvi'
clean = 'rm '+ cut_file[0] +'.dvi '+ cut_file[0] +'.log '+ cut_file[0] +'.aux'

subprocess.call(platex.split())
subprocess.call(platex.split())
subprocess.call(dvipdfmx.split())
subprocess.call(clean.split())

コマンド実行時に入力したファイル名がcommand.pyの実行時の引数となるため最終的にplatex ファイル名としていたように使える.

引数として与えられたものを変数fileに格納しcut_fileにsplitで拡張子の前後で二つに区切ります.
そして各コマンドを実行するときと同様になるように変数に連結し格納,そして実行しログファイルを最後に消します.

platex = 'platex' + cut_file[0]  としてもokです私は下との統一を図るために
platex = 'platex ' + cut_file[0] + '.tex'としています

動かせるプログラムは完成したので70%くらいは完了です

5.コマンド化する

ここまできたらあとはどこからでも利用できるようにコマンドにしてあげるだけです
alias コマンド名='実行すること
とすることでalias(別名)を設定してあげることができ,コマンド名を入力することで実行すると定義したものを実行できます.
試しにここではalias ll='ls -l'としてみましょうするとllと入力するだけでls -lを実行できるでしょう.
しかしこのaliasには有効期限があり.ターミナルを終了するとaliasの設定した履歴も消えてしまいます.なのでこのaliasを.bash_profileに記述します

cd ~
ls -al

として.bash_profileがなければ
touch .bash_profile
として.bash_profileを作成してください

あることが確認できた,もしくは作成できたら
open .bash_profileなりviを使えるならvi .bash_profileなどでファイルを開き
alias tex='python3 ~/Tools/command.py'のようにalias コマンド名='実行する物'の形で記述してあげてください.

そうするとtex ファイル名.texと実行してあげることでtexをpdfに変換することができたのじゃないでしょうか?

*シェルスクリプト(.sh)を起動して何かをするというときはchmodで実行権限を与えるというステップが増えます
以上!!!!!