3
4

TeXworks、TeXShop、VSCodeでTeX-style shebangしてみた

Last updated at Posted at 2021-08-14

この記事では、LaTeX文章にコメントアウトでマジックコメントとしてTeX-style shebang %#! <typeset command> を記述することで、主要なTeX編集環境のエディタ上で、明示的にLaTeX関連のコマンドを実行する一例を紹介します。

TeX-style shebangとは?

わたしは普段、テキストエディタEmacs上でTeX/LaTeX編集支援YaTeXを利用しています。YaTeXの便利な機能の一つに、LaTeX文章の最初の方に、例えば、

%#! lualatex --synctex=1 beefplate.tex

を書いておくと、Emacs上から、この行の「%#!」を除いたlualatex --synctex=1 beefplate.texを実行することができます。

Unix系のスクリプトの #! から始める1行目のことをshebang(しぇばん)と言います。shebangは、直接このスクリプトを起動してスクリプトを読み込むと、#!で指定したインタプリタを指定できます。

YaTeXはTeXコメントアウト、いわばマジックコメントとして「%#!」を記述することで、TeX/LaTeXのshebangを提供してくれています。ここではこの「%#!」から始まる行のことをTeX-style shebangと呼ぶこととします。

実は、TeX-style shebangは、必ずしも1行目に記述しなくてもかまいません。例えば、

% #! ptex2pdf -l -u -ot '--synctex=1' -od '' beefplate
%#! lualatex --synctex=1 beefplate.tex

のように記述すると、YaTeXが読み取るTeX-style shebangは2行目で、lualatex --synctex=1 beefplate.texを実行します。

TeX-style shebangしてみた動機づけ

わたしはYaTeXのTeX-style shebangの機能がとても便利だと思っているので、他のTeX/LaTeX系エディタでも使えるかと思いきや、TeXworks、TeXShop、Visual Studio Codeの拡張機能LaTeX Workshopなど、ほとんどのエディタでそうなっていないことが分かりました。

ほとんどのTeX/LaTeX系エディタは、LaTeX文章をタイプセットするための方法や決まった手順書を、プロファイルやレシピという名前で予め用意されているか登録して、それを呼び出すことでLaTeX文章をタイプセットさせる方式をとっています。一応、それらのプロファイルやレシピなどを明示的に呼び出すためのマジックコメントが用意されています。

このプロファイルやレシピを選んで、TeX/LaTeX文章をタイプセットする方式は、一見便利なように見えますが、目次や索引を生成したりするなど、単純なLaTeX文章を1回タイプセットする以外の処理には、非常に不便で、かゆいところに手が届きにくいと思います。また、別途ターミナルを開いて、そこから別途なにか実行して、またTeXエディタに戻るのも面倒なことが多いです。

そこで、TeXworks、TeXShop、Visual Studio Codeの拡張機能LaTeX Workshopなどで、このTeX-shebangを使うことができれば、その場で明示的に実行するコマンドを柔軟に書き換えて、実行することができます。

  • 索引を生成させる処理も実行する。 %#! uplatex foobook && upmendex foobook && uplatex foobook && uplatex foobok && dvipdfmx foobook
  • makeコマンドやrakeコマンド、llmkコマンドなどで一連の処理を実行して、foobook.pdfをビルドする。 %#! make foobook.pdf
  • Dockerコンテナ内のlualatexコマンドで、foobook.texをタイプセットする。 %#! docker run (中略) lualatex --synctex=1 foobook

TeX-style shebangするLuaスクリプトのインストール

2023年9月現在、runtexshebangは、

TeX Live 2023をお使いの方は、runtexshebangコマンドをすぐに利用可能な状態です。

例:TeXworks

設定

ScreenShot 262.png

タイプセットの方法に「runtexshebang」を追加して、「タイプセットの方法を設定する」において、以下のように設定します。

  • 名前:runtexshebang
  • プログラム:runtexshebang
  • 引数:$fullname

LaTeX文章

TeX-style shebang行「%#!」と合わせて、TeXworksのTeXエディタで有効なマジックコメント「% !TeX program = <タイプセットの方法の名前>」も添えておくと、つぎにこのLaTeX文章ファイルをTeXworksで開いたときに、自動的に<タイプセットの方法の名前>を指定してくれます。

%#! lualatex --synctex=1 beefplate
% !TEX program = runtexshebang

ScreenShot 254.png

「&&」でつなげて、upmendexコマンドも実行してりできますね。

ScreenShot 255.png

例:TeXShop

設定

ScreenShot 256.png

ここでは、「TeX+dvipdfmx」と「LaTeX」をruntexshebangにしています。

LaTeX文章

TeXworksと同様に、TeXShopで有効なマジックコメントを与えておくと、便利です。

%#! lualatex --synctex=1 beefplate
% !TEX program = runtexshebang

ScreenShot 257.png

例:Visual Studio Codeの拡張機能LaTeX Workshop

設定

何も設定する必要はありません。

個人的に、一見便利に思える「レシピ」を設定することを安易に勧められません。
通常のタイプセットであったしても、LaTeX Workshopで有効なマジックコメントにより、明示的にコマンドやオプションを与えてタイプセットしたほうが、なにか問題が起こったとしても、エディタ側の問題なのか、シェル側の問題なのか、TeX環境側の問題なのか、切り分けがしやすいと思います。

LaTeX文章

LaTeX Workshopで有効なマジックコメントを以下のようにします。

% !TEX program = runtexshebang
% !TEX options = "%DOC%".tex

ScreenShot 258.png

これにより、beefplate.tex に対して指定したマジックコメントから、

runtexshebang beefplate.tex

が実行されて、beefplate.tex の TeX-style shebangの行が実行されます。

例:その他

本来、各TeXエディタ上の「タイプセット」「▶」はタイプセットするの用途ですが、TeX-shebangを実行することにより、TeXエディタ上の各種設定などを調べたりするなど、なにか問題があるときの問題解決の糸口を見いだせるかもしれません。

実際に、主要なTeXエディタで「なんかテフが動かない! なんで?」のとき、手元のTeXエディタでどういう状態になっているのか、把握しきれいない場合がほとんどです。

TeXエディタ上の各種設定を調べる

例えば、TeXエディタ上の環境変数 $PATH をサクッと調べたりするのにも使えますね。

%#! echo $PATH

ScreenShot 261.png

ScreenShot 263.png

DockerコンテナでTeX/LaTeXしたり、各種設定を確認したりなど

例えば、Dockerコンテナ内で、lualatexしたり、OS情報をサクッと表示させたりできますね。
一例として、Docker HubにあるDockerイメージ munepi/tllangjapanese:2021 のOS情報を確認できますね。

%#! docker run -i --rm --platform linux/amd64 --workdir /data --mount type=bind,src=$(pwd)/,dst=/data/  munepi/tllangjapanese:2021   cat /etc/os-release

ScreenShot 260.png

やっぱり、TeX-style shebangは便利!

昨今、主要なTeXエディタ TeXworks、TeXShop、VSCodeの拡張機能LaTeX Workshopで、TeX-style shebangをしてみたをまとめてみました。

  1. 2021年当初、簡単に書いた runtexshebang.luaGISTに置いていました。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4