LuaTeX / SyncTeXの異常な動作について

LuaTeX / SyncTeXの異常な動作について

- 酔漢 . の投稿
返信数: 2

始めまして。

LuaTeXをつかってPDFファイルを出力すると、SyncTeXによる前方・後方の同期がおかしくなることがあります。

厳密な条件を絞り込みきっていませんが、これまでの様子からするとLuaTeXの問題ではないかと思われます。コミュニティに報告すべきですが、その前に自分でできる試験(synctexファイルの健全性チェックなど)がありましたらお教えください。

よろしくお願いします。

再現環境

  • Ubuntu 22.04 LTS
  • TeX Live 2024 ( install-tl-unx.tar.gz よりインストール)
  • lualatex (LuaHBTex 1.18.0 )
  • Document class :
    • book
    • jlreq

UbuntuはWSLおよびデスクトップLinux (KDE Neon)で再現しています。

再現手順

  • 以下のコマンドでPDFファイルを生成する。
    • lualatex -synctex=1 main.tex
  • PDFファイルを開き、chapter 2へ移る。
  • Chapter 2から LaTeXソース(fox.tex)へのリンクを試みる。
  • しかしこの操作は失敗する(fox.texからChapter 2へのリンクも失敗する)。

再現資料

一式が39kBあるのでアップロードできません。リンクを貼ります:

発見状況

100ページほどLaTeX文書を書いた後、upLaTeXからLuaTeXに乗り換えたときに気が付きました。 添付のファイルは問題を再現するものとしては最小に近いです。

酔漢 . への返信

Re: LuaTeX / SyncTeXの異常な動作について

- はやて (h20y6m) の投稿

LuaTeX のバグっぽい感じですね。 (Windows の TeX Live 2024 と SumatraPDF v3.4.6 で再現)

\saveboxresource\includegraphics のなかで使っている)を使ったときに壊れた .synctex ファイルが作成されているみたいです。 (WSL 上でコマンドラインから evince で pdf を開くと ! SyncTeX Error : Ignored record <{2 という怪しげなメッセージが出ますね。)

plain LuaTeX でもう少し小さい再現例を作るとこうなりました。 (.synctex ファイルは 90 行)

%#! luatex
\setbox0=\hbox{S}
\saveboxresource0
\useboxresource\lastsavedboxresourceindex
\vfill \break
A
\input sub
\bye
% sub.tex
\vfill \break
B
\endinput

作成された .synctex ファイルを見ると1ページ目の途中に2ページ目の開始があったり、 1ページ目の終了や2ページ目の開始が2つあったりと、明らかにおかしな状態になっています

...
10: {1 ← 1ページ目の開始
...
27: {2 ← 2ページ目の開始 !?
...
32: }1 ← 1ページ目の終了 !?
...
34: }1 ← 1ページ目の終了
...
37: {2 ← 2ページ目の開始
...
60: }2 ← 2ページ目の終了
...
62: {3 ← 3ページ目の開始
...
60: }3 ← 3ページ目の終了
...

ただ、単に .synctex ファイルがこのようにおかしな状態になっていてもソースコードへ飛べなくなるのはかなり限られた状況だけのようです。 なのでもしかしたら全くの見当はずれの可能性もあります。


上記の .synctex の記述は luatexdir/pdf/pdfshipout.c の ship_out で書き出されているようですが、 この関数は(ship_out という名前にもかかわらず) \shipout だけでなく \saveboxresource を出力するときにも流用されているようです。

\shipout で1ページ目を出力している途中で \saveboxresource を見つけて入れ子で ship_out が呼び出されて滅茶苦茶になってしまっているのだと思います。

はやて (h20y6m) への返信

Re: LuaTeX / SyncTeXの異常な動作について

- 酔漢 . の投稿
はやて様

確認いただきありがとうございます。やはりLuaTeXのバグである線が濃厚なのですね。

調べてみたところLuaTeXのチームはバグレポートを受け付けているようなので、メールリストに登録して報告してみます。

ありがとうございました。