かすみん日記

暇なときに何か喋ります

【LaTeX】styファイルを探す場所

環境

  • MacOS (Mojave)
  • texlive 2016

前提

  • latexmkを使ってタイプセットしている。

はじめに

自分で作ったstyファイルなどをちゃんと読み込んでくれるようにするには、主に以下の2つの方法がある。

  1. styファイルを、タイプセットするtexファイルと同じディレクトリに入れておく。
  2. styファイルを、 texlive/texmf-local/tex/latex/ などの適切な場所に配置し、 sudo mktexlsr を実行し ls-R を更新する。

問題

訳あって上の 2. の方法を使いたくないとする。 (例えばtexソースを共有するときに、相手方にstyファイルのインストールの説明までするのは面倒。)

そういうときは、単に上の 1. の方法をとれば良いのだが、styファイルの数が増えると、ディレクトリが汚くなる。

そこで、サブフォルダを作成してそこにstyファイルたちを入れてみるたくなるが、そうするとstyファイルを見つけられずタイプセットに失敗する。

report/
 ├─report.tex
 └─sty/
   ├─mymacro01.sty
   ├─mymacro02.sty
   └─mymacro03.sty

解決

カレントディレクトリ以下のサブディレクトリの中もstyファイルを探すように、.latexmkrc ファイルを編集(or 作成)する。

多分latexmkが使えている人は、homeディレクトリ(例えば /Users/○○ みたいな所)に .latexmkrc を作成しているはずなので、今までの設定は変えずに、前でも後ろでもどこでもいいので以下の1行

$ENV{'TEXINPUTS'}='.//:' . $ENV{'TEXINPUTS'};

を追加する。

もしstyファイルを入れておくサブディレクトリをstyと決めているのなら

$ENV{'TEXINPUTS'}='./sty//:' . $ENV{'TEXINPUTS'};

と書いてもいい。

また、homeディレクトリに行くのが面倒なら、タイプセットするtexソースと同じディレクトリに .latexmkrc を作成して、上のコマンドを1行書くだけでもいい。

vscodeの場合

エディタvscode拡張機能 LaTeX Workshop を使ってタイプセットを済ましている人は、 settings.jsonlatex-workshop.latex.tools に以下のコマンドを追加すれば、上と同じ結果が得られる。

  "latex-workshop.latex.tools": [
    {
      "name": "latexmk",
      "command": "latexmk",
      "args": [
      \\ ここには既にコマンドがいくつか書いてある。
      \\ 最初でも最後でもいいので以下の2行を追加する。
        "-e",
        "$ENV{'TEXINPUTS'}='.//:' . $ENV{'TEXINPUTS'}"
      ]
    }
  ]

ただし、既に設定が書いてあるときはカンマ , で区切ること!

参考

www.overleaf.com

tex.stackexchange.com