mendex のスタイルファイルの改行

mendex のスタイルファイルの改行

- でび まる の投稿
返信数: 1

でびまる といいます。あまり詳しくない索引がらみの問題です。

Windows ユーザさんから渡された索引付きのファイルをコンパイルしていてエラーになり、少し調査
してみました。Linux しかないので Windows では未確認です。
makeindex/upmendex/mendex でスタイルファイルの最終行が改行されてるかどうか比較すると
mendex は upmendex, makeindex と違いがある様に思われます。

例としてメインなファイルを sam-ind.tex とし makeindex/(up)mendex 用のスタイルファイルを、
最終行に改行なしで wo-cr.ist としてみます。(改行あれば問題ありません)
(念の為 sam-ind.tex, wo-cr.ist と mendex で生成された sam-ind.ind を sample.tar.gz
に添付)

---------- sam-ind.tex
\documentclass[12pt]{article}
\usepackage{makeidx}
\makeindex

\begin{document}
A problem of stylefile for makeindex\index{makeindex}.

\printindex
\end{document}
---------- wo-cr.ist
delim_0 "\\dotfill\ "
headings_flag 1
heading_prefix   "\n { - "
heading_suffix   " - }\\par\n"
----------

lualatex sam-ind
makeindex -s wo-cr.ist sam-ind
lualatex sam-ind

の場合と upmendex は問題ないのですが「mendex -s wo-cr.ist sam-ind」とした場合
には次のステップの lualatex sam-ind で下の様なエラーになります。

----------
(./sam-ind.aux) (./sam-ind.ind [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex
.map}] [2]
! Missing } inserted.
<inserted text> 
                }
l.6 \end{theindex}
                  

----------
実際 sam-ind.ind を見ても heading_suffix が効いてない感じでした。

当初は mendex/upmendex は区別しなくて良いと考えて mendex と makeindex を比較
してましたが念の為 upmendex を確認したら想定外の結果になり mendex だけで問題が発生
しました。混乱してるかも分りませんがよろしくお願いします。

でび まる への返信

Re: mendex のスタイルファイルの改行

- はやて (h20y6m) の投稿
mendexk のソースコードを見てみましたが、行の途中でファイルの終端 (EOF) に遭遇するとその行は処理されずに読み捨てられてしまうようです。
https://github.com/TeX-Live/texlive-source/blob/trunk/texk/mendexk/fread.c#L603
履歴をさかのぼってみましたが mendexk が TeX Live にコミットされた 2010 年の時点からそのような動作になっていると思われます。

というわけで、mendex の場合はファイルの最後の行に必ず改行を入れるようにしてください。


mexdexk だけ動作が違うのは文字コード変換を行うために標準の fgets 関数から独自の文字コード変換しながらファイルを読む関数に置き換えており、その関数がそうなってしまっているためのようです。
upmendex は UTF-8 前提で文字コード変換機能はないはず。

おそらくバグだとは思いますが修正したとしても TeX Live 2026 はすでに code freeze ですのでよほどのことがなければ修正バイナリは TeX Live 2027 になると思います。