\pfill 可能与其他命令或包冲突

\pfill 可能与其他命令或包冲突

朋友们,我遇到了以下问题:我有一个包含多个索引的文档。该splitidx软件包可以毫无问题地处理它们。碰巧我有一些非常长的索引条目,所以我决定让它们看起来更美观:

对很长的索引条目进行样式化,使其看起来更美观

步调一致提供了一个惊人的解决方案效果非常好。此解决方案在我的其他文档中有效。不幸的是,当我尝试在“生产文档”中使用它时,它不起作用。埃格尔建议我将文档精简为一个最小示例,因此这里就是。谢天谢地,它仍然不起作用:

% since the first example was full of "package noise",
% I left only the needed ones.
\documentclass[12pt,oneside]{book}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{savesym}

\usepackage[useindex]{splitidx}
\savesymbol{newindex}
\makeindex
\orignewindex[My custom index]{stl}
\AtWriteToIndex{stl}{\let\thepage\thesongnum}

\usepackage{idxlayout}
\usepackage[lyric]{songs}

\newindex{reltitleidx}{cbreltitle}

\begin{document}

\showindex{{\normalfont\bfseries My songs index}}{reltitleidx}

\begin{songs}{reltitleidx}

\beginsong{Funny song}[by={},sr={}]

\sindex[stl]{Cool@\textbf{Cool}!Stuff}

\beginchorus
This is my chorus.
\endchorus

\beginverse
Verse 1.
\endverse

\beginverse
Verse 2.
\endverse

\beginverse
Verse 3.
\endverse

\endsong

\end{songs}

\printindex*

\end{document}

非常感谢您的帮助。

编辑1:我忘了提一下。\pfill似乎会引发错误。如果我将其从ist样式文件中删除,则文档将成功编译。

有以下命令:pdflatex mydocument.tex,,,,。splitindex mydocument.idxmakeindex -s mystyle.ist mydocument-stl.idxpdflatex mydocument.tex

编辑2:引发的错误:

! Undefined control sequence. <recently read> \efill l.4 \item \textbf{Cool}\efill

! Undefined control sequence. \pfill ...ll \penalty 500 \strut \nobreak \dotfil ~\ignorespaces l.5 \subitem Stuff\pfill 1

编辑3:我欠埃格尔喝一杯。第一个错误消失了!索引已正确生成,但这个烦人的错误仍然困扰着我:

! Undefined control sequence. \pfill ...ll \penalty 500 \strut \nobreak \dotfil ~\ignorespaces l.5 \subitem Stuff\pfill 1

编辑4:现在这个问题已经解决了,感谢埃格尔的绝妙解决方案。=)

编辑5:为了完整性,我的样式文件基于gind.ist。由于这些命令未根据其他命令定义,因此引发了上述错误。一旦正确定义它们,错误就会消失。

答案1

\pfill是来自的宏ltxdoc

\def\pfill{\unskip~\dotfill\penalty500 
  \strut\nobreak\leaders\hbox to.6em{\hss.\hss}\hfil~\ignorespaces}

您可能还需要\efill

\def\efill{\hfill\nopagebreak}

\dotfil定义为

\def\dotfil{\leaders\hbox to.6em{\hss.\hss}\hfil}

答案2

Paulo:关于您的 MWE——我不得不将这四个\renewcommand{\idx...}命令更改为\newcommand,还必须注释掉该\songpos命令(第 50 行),因为它似乎没有在 songs.sty 中定义。通过 latex 和 makeindex 运行 MWE 后,以下文本显示在 song.ilg 文件中:

This is makeindex, version 2.15 [TeX Live 2011] (kpathsea + Thai support).
Scanning input file song.idx...
!! Input index error (file = song.idx, line = 1):
   -- Unknown index keyword \indexentry[stl].
done (0 entries accepted, 1 rejected).
Nothing written in song.ind.
Transcript written in song.ilg.

这也是您遇到的错误吗?

相关内容