Closed aminophen closed 2 years ago
mendex の fwrite.c で #define BUFFERLEN 4096
なのに対して今回の大量のエントリは 4096 バイト以上あることが直接の原因のようですが,安直に増やすと環境によっては問題があるのでしょうか? ちなみに upmendex は mendex と同じく尻切れとなり,makeindex は切れずに正常出力されました。
また,原理的にはどこかに上限を設けるしかないのは承知の上で,ただその場合でも切れた旨を警告してくれた方が親切なように思います。
今回引っかかっているのは↓で導入した文字列出力の上限を設けたところでしょうか?
安直に増やしても問題になることは無いと思いますが、問題にならない上限の値はいくら位でしょうか?
ソースを見る限りだと,2014年より昔も出力文字列の上限は4096だったように見えます。
mendex の場合,改行文字 \n を含む出力文字列をいったんすべてバッファ lbuff に溜め込んでいる(fwrite.c の linecheck 関数)のが上限に達しやすい根源のようです。
参考:makeindex/genind.c は wrap_line 関数で,改行時にそのつどファイルに吐き出しています。
mendex-longbuf ブランチで試しに https://github.com/texjporg/tex-jp-build/commit/564d999f073d7be8504559af692c973d68eb8154 のように「改行の都度ファイルに吐き出す」とすれば,バッファサイズを増やすことなく正常出力されるようです。いかがでしょう?
ありがとうございます。 ソースを見ました。趣旨に賛同します。
添付の upldoc-ind.zip において
とすると,1つのエントリが大量出現する場合(この場合は
\xspcode
)にのように出力が途中で途切れます。
参考:これが露呈したのは https://github.com/texjporg/platex/issues/98 に記載の「doc.sty v3 が hyperref 依存になった」に伴い https://github.com/texjporg/platex/commit/98d2da52068b90723222d143117529ae6e550b9a 及び https://github.com/texjporg/uplatex/commit/eb5f4ce60bd953481bc220aac7919e97568db265 で platex/uplatex のソースコード説明書の PDF 作成ソースを更新しようとしたら
という不思議なエラーで止まったからでした。ここで
\hdcl
というのは\hdclindex{460}{code}{…},
というエントリを出力しようとして尻切れしたもののようです。