TeX Live 2022 に更新後 .sty が見えないことへの対処
概要
TeX Live 2022 にアップデートしたのちに,手作業で加えていた .sty が見えなくなり,コンパイルが通らなくなってしまいました。これを見えるように直したときの記録です。ただし,本質的な解決ではなく,対症療法です。
背景
TeX Live を 2019 から 2022 にアップデートしたところ,TeX Live に含まれていない手作業で texmf-local に加えていたはずの .sty が見えなくなりました。 すなわち,次のエラーによってタイプセットできなくなりました。
! LaTeX Error: File `FILENAME.sty' not found.
ここで,TeX Live 2022 における TeXworks のパスの確認や mktexlsr
などは TeX Live 2019 と同じように行ったはずでした。
前提
- TeX Live のインストールから使用まではわかる。
- 手作業でパッケージを導入していて(texmf-localディレクトリを使っている),
mktexlsr
がわかる。 - TeX Live をインストーラによってインストールした。
- OS が Windows である(他の環境がないため,どの程度参考になるのかも分かりません)。
内容
準備
- アップデート前(ここでは 2019)で手作業で加えていた .sty が置かれているディレクトリを調べておいてください。
- 私の環境では C:\texlive\texmf-local\tex\latex です。
通常の作業
- 「C:\texlive\2022」を開いてください。
- 管理者権限のもとテキストエディタで「texmf.cnf」を開いてください。管理者権限で開く方法がわからなければ,「texmf.cnf」をデスクトップなどにコピーしてから開くとよいでしょう。
TEXMFLOCAL = $SELFAUTOPARENT/texmf-local
と書かれた行を探し出し,TEXMFLOCAL = [アップデート前(ここでは 2019)で手作業で加えていた .sty が置かれているディレクトリの親ディレクトリのうち texmf-local まで]
と書き換えてください。- 私の環境では
TEXMFLOCAL = C:/texlive/texmf-local
でした。 - ¥(または \)ではなく
/
であることに気をつけてください。
- 私の環境では
- デスクトップなどにコピーしてから開いていた場合は,元のフォルダに上書きコピーしてください。
mktexlsr
を実行してください。
TeXWorks を再起動して,タイプセットを試みてください。 今度はアップデート前(ここでは 2019)で手作業で加えていた .sty も見つかるはずです。
texmf.cnfを(不安などの理由で)触りたくないときの作業
- 「アップデート前(ここでは 2019)で手作業で加えていた .sty が置かれているディレクトリ」を開いてください。
- 別のウィンドウで「C:\texlive\2022\texmf-local\tex\latex」を開いてください。
- 「アップデート前(ここでは 2019)で手作業で加えていた .sty が置かれているディレクトリ」にあるフォルダ・ファイルを「C:\texlive\2022\texmf-local\tex\latex\local」へコピーしてください。
mktexlsr
を実行してください。
TeXWorks を再起動して,タイプセットを試みてください。 今度はアップデート前(ここでは 2019)で手作業で加えていた .sty も見つかるはずです。
詳細
本来,C:\texlive\texmf-local はリリースに依らずに用いたいローカルなフォント・マクロを配置するディレクトリのはずです。 したがって,TeX Live を更新したからといってこのような問題が起こることは本来ないはずです。実際,TeX Live 2022 のマニュアルにもそうあります(3.4.6 ローカルおよび個人用のマクロを利用する)1。
したがって,私の環境や設定に何か問題がある可能性が高いのですが,とりあえず動いてもらわなければ困ります。 偶然にも同じの事象でお困りのかたにとって参考になるよう,記録に残しました。
はじめは 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-local が C:/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.
さらに,不安なかた向けにはすでに指定されているディレクトリにコピーするというさらなる対症療法も載せておきました。