TeX Live 2022 に更新後 .sty が見えないことへの対処

目次

TeX Live 2022 にアップデートしたのち,手作業で加えていた .sty が見えなくなり,コンパイルが通らなくなった。これを見えるように直したときの記録である。ただし,本質的な解決ではなく,対症療法である

環境は次のとおりである。

  • TeX Live 2022 をインストーラによってインストールした。
  • 手作業でパッケージを導入している(texmf-local ディレクトリを使っている)。
  • mktexlsr を実行できる。
  • OS が Windows である。

背景

TeX Live を 2019 から 2022 にアップデートしたところ,手作業で texmf-local に加えていた(TeX Live に含まれていない) .sty たちが見えなくなった。 すなわち,次のエラーによってタイプセットできなくなった。

! LaTeX Error: File `FILENAME.sty' not found.

TeX Live 2022 における TeXworks のパスの確認や mktexlsr などは TeX Live 2019 と同じように行ったはずであった。

解決

準備

  • アップデート前(ここでは 2019)で手作業で加えていた .sty が置かれているディレクトリを調べる。
    • 私の環境では C:\texlive\texmf-local\tex\latex であった。

通常の作業

  1. C:\texlive\2022 を開く。
  2. 管理者権限のもと,テキストエディタで texmf.cnf を開く。管理者権限で開く方法がわからなければ,texmf.cnf をデスクトップなどにコピーしてから開くとよい。
  3. TEXMFLOCAL = $SELFAUTOPARENT/texmf-local と書かれた行を探し,TEXMFLOCAL = [アップデート前(ここでは 2019)で手作業で加えていた .sty が置かれているディレクトリの親ディレクトリのうち texmf-local まで] と書き換える。
    • 私の環境では TEXMFLOCAL = C:/texlive/texmf-local であった。
    • ¥(または \)ではなく / であることに注意されたし。
  4. デスクトップなどにコピーしてから開いていた場合は,元のフォルダに上書きコピーする。
  5. mktexlsr を実行する。

最後に TeXWorks を再起動すれば,アップデート前(ここでは 2019)で手作業で加えていた .sty も見つかる。

texmf.cnfを(不安などの理由で)触りたくないときの作業

  1. 「アップデート前(ここでは 2019)で手作業で加えていた .sty が置かれているディレクトリ」を開く。
  2. 別のウィンドウで C:\texlive\2022\texmf-local\tex\latex を開く。
  3. 「アップデート前(ここでは 2019)で手作業で加えていた .sty が置かれているディレクトリ」にあるフォルダ・ファイルを C:\texlive\2022\texmf-local\tex\latex\local へコピーする。
  4. mktexlsr を実行する。

最後に TeXWorks を再起動すれば,アップデート前(ここでは 2019)で手作業で加えていた .sty も見つかる。

詳細

本来,C:\texlive\texmf-local はリリースに依らずに用いたいローカルなフォント・マクロを配置するディレクトリである。 したがって,TeX Live を更新したからといってこのような問題が起こることはないはずである。 実際,TeX Live 2022 のマニュアルにもそうあります(3.4.6 ローカルおよび個人用のマクロを利用する)。

したがって,私の環境や設定に何か問題がある可能性が高いのだが,とりあえず動いてもらわなければ話にならない。

はじめは mktexlsr が不完全なのではと疑った。 TeX Live 2022 導入後の mktexlsr を眺めると次のようになっている。

C:\WINDOWS\system32>mktexlsr
mktexlsr: Updating C:/texlive/2022/texmf-local/ls-R...
mktexlsr: Updated C:/texlive/2022/texmf-local/ls-R.
mktexlsr: Updating C:/texlive/2022/texmf-config/ls-R...
mktexlsr: Updated C:/texlive/2022/texmf-config/ls-R.
mktexlsr: Updating C:/texlive/2022/texmf-var/ls-R...
mktexlsr: Updated C:/texlive/2022/texmf-var/ls-R.
mktexlsr: Updating C:/texlive/2022/texmf-dist/ls-R...
mktexlsr: Updated C:/texlive/2022/texmf-dist/ls-R.
mktexlsr: Done.

texf-localC:/texlive/2022/ の下にある。 これはかなり怪しい。 C:/texlive/2019/ にはなかった。

ここで,どこを見ているかを疑って調べた。

C:\WINDOWS\system32>kpsewhich -var-value TEXMFLOCAL
C:/texlive/2022/texmf-local

したがって,対症療法として texmf-local の場所を指定することとした。 C:\texlive\2022\texmf.cnf は,次のように書かれており安心して書き換えられる。

% This texmf.cnf file should contain only your personal changes from the
% original texmf.cnf (for example, as chosen in the installer).

ファイルを検索すると C:\texlive\2022\texmf-dist\web2c\texmf.cnf も見つかるが,こちらは次のように書かれており,書き換えるべきではない。

% If you modify this original file, YOUR CHANGES WILL BE LOST when it is
% updated.  Instead, put your changes -- and only your changes, not an
% entire copy! -- in ../../texmf.cnf.  That is, if this file is
% installed in /some/path/to/texlive/2022/texmf-dist/web2c/texmf.cnf,
% put your custom settings in /some/path/to/texlive/2022/texmf.cnf.
% (Below, we use YYYY in place of the specific year.)

書き換えたのちにはめでたく次のようになった。

C:\WINDOWS\system32>kpsewhich -var-value TEXMFLOCAL
C:/texlive/texmf-local
C:\WINDOWS\system32>mktexlsr
mktexlsr: Updating C:/texlive/texmf-local/ls-R...
mktexlsr: Updated C:/texlive/texmf-local/ls-R.
mktexlsr: Updating C:/texlive/2022/texmf-config/ls-R...
mktexlsr: Updated C:/texlive/2022/texmf-config/ls-R.
mktexlsr: Updating C:/texlive/2022/texmf-var/ls-R...
mktexlsr: Updated C:/texlive/2022/texmf-var/ls-R.
mktexlsr: Updating C:/texlive/2022/texmf-dist/ls-R...
mktexlsr: Updated C:/texlive/2022/texmf-dist/ls-R.
mktexlsr: Done.

参考