LuaLaTeXはFlatpakTeXLiveで出力を生成しません

Aug 23 2020

私は現在、Linux FlatpaksでTeXLiveを使用できるようにすることに取り組んでいますが、LuaLaTeXは「サイレントに」失敗し、何が間違っているのか、どこから始めればよいのかわかりません。出力と症状は、Lualatexが出力を生成しない(MiKTeX)と同じですが、UCS / ANSIエンコーディング$HOMEを使用するWindowsを使用しておらず、ファイルや非ASCIIパスを使用しておらず、MikTeXを使用していません。

リンクされた質問のmweを再利用しています:

コンパイル

abc \bye

luatex動作しますが、私はOTFパッケージをロードする場合:

\input luaotfload.sty
abc \bye

私は得る:

$ luatex mwe.tex 
This is LuaTeX, Version 1.12.0 (TeX Live 2020) 
 restricted system commands enabled.
(./mwe.tex
(/usr/lib/sdk/texlive/texmf-dist/tex/luatex/luaotfload/luaotfload.sty
(/usr/lib/sdk/texlive/texmf-dist/tex/latex/base/ltluatex.tex)

出力/ログの最後の行に、エンジンのクラッシュ(?)を示す可能性のある改行がないことに注意してください。

さらに、luaotfload-tool -u最高の冗長性で実行しても、出力はまったく得られません。ただし、その価値については、ConTeXt MkIV(つまり、バックエンドとしてLuaTeXを使用)は正常に機能します。

私の最初の仮定は、FlatpakがTeXLive 2020のDVDリリースに基づいており(luaotfloadの2つのマイナーリリースを含む)、更新がないというものでした。私は現在、FlatpakでTeXLiveの最近のスナップショットを毎日使用できるように取り組んでいます(https://github.com/flathub/org.freedesktop.Sdk.Extension.texlive/pull/28)、ただし、これによって上記の動作は変更されませんでした(Flatpakでluaotfload 3.14を実際に実行していることを確認しました)。

再現する手順:

  1. フラットハブリモートとディストリビューションを構成して、パスにフラットパックが含まれるようにしてから、TeXLiveをインストールします。

    $ flatpak install org.freedesktop.Sdk.Extension.texlive
    
  2. サンドボックス内でシェルを実行し、TeXLiveSDKをPATHに配置します。

    $ flatpak run --command=/usr/bin/sh --devel org.freedesktop.Sdk
    [ org.freedesktop.Sdk ~ ]$ source /usr/lib/sdk/texlive/enable.sh 
    
  3. MWEを作成し、ビルドします。

    [ org.freedesktop.Sdk ~ ]$ cat > mwe.tex
    \input luaotfload.sty
    abc \bye
    [ org.freedesktop.Sdk ~ ]$ luatex mwe.tex
    

回答

3 HenriMenke Aug 23 2020 at 10:43

最近、Nixを使用してTeXドキュメントを作成しようとしたときに、同じ問題に直面していました。いくつかのデバッグの後、根本的な問題はTEXMFCACHE書き込み可能ではないことであることがわかりました。texmf.cnf調べてみると、デフォルト値は

[📦 org.freedesktop.Sdk ~]$ cat /usr/lib/sdk/texlive/texmf-dist/web2c/texmf.cnf | grep -e '^TEXMFVAR' -e '^TEXMFSYSVAR' -e '^TEXMFCACHE' TEXMFSYSVAR = $TEXMFROOT/texmf-var
TEXMFVAR = ~/.texlive2020/texmf-var
TEXMFCACHE = $TEXMFSYSVAR;$TEXMFVAR

Flatpakの場合、Flatpak./install-tl -portableのパッケージ化プロセスの一部としてオプションによってオーバーライドされるものがあります。

[📦 org.freedesktop.Sdk ~]$ cat /usr/lib/sdk/texlive/texmf.cnf | grep -e '^[^%]' TEXMFLOCAL = $SELFAUTOPARENT/texmf-local
TEXMFHOME = $TEXMFLOCAL TEXMFVAR = $TEXMFSYSVAR
TEXMFCONFIG = $TEXMFSYSCONFIG ASYMPTOTE_HOME = $TEXMFCONFIG/asymptote

だから、もともとTEXMFCACHEの用語で定義されているTEXMFSYSVARTEXMFVAR。最初のものは、TEXMFSYSVAR通常、ほとんどのシステムで書き込み可能ではないが、後者は、TEXMFVAR常に書き込み可能であると仮定されます。もちろん、Nixのように、すべてがシステムの読み取り専用オーバーレイとしてマウントされている場合、この仮定は失敗します。

Flatpakでは問題は同じではありませんが、関連する、としてTEXMFVARも、これとTEXMFCACHEポイントTEXMFSYSVARのみ(による-portableオプション)。このディレクトリは読み取り専用であるため、これも失敗します。

幸いtexmf.cnf、同じ名前の環境変数を設定するだけで、の値をオーバーライドできます。たとえば、

$ flatpak run --env=TEXMFVAR=/tmp --command=/usr/bin/sh --devel org.freedesktop.Sdk

ここで私はを選択しましたがTEXMFVAR=/tmp、書き込み可能であることが保証されている他のディレクトリも同様に機能しますTEXMFVAR=/run/user/$(id -u)。Flatpaksの$XDG_CACHE_HOME場合、たとえば~/.var/app/com.visualstudio.code/cache/texmf-varVS Code内でSDKを使用する場合など、Flatpaksを(ホストではなく)値に設定するのが妥当です。

設定TEXMFCACHEするだけでもluaotfload問題は解決します。あなたが生成する必要がある場合は、tfmまたはpk上のフォントこれはへの書き込みアクセスを必要とするため、あなたは再び壁にヒットします飛びますTEXMFVAR