表中 \SpecialMacroIndex 和相关命令的使用

表中 \SpecialMacroIndex 和相关命令的使用

前段时间,“doc”包显然将其默认设置从不包括 hyperref 更改为包含 hyperref,并且我注意到我的输出发生了变化(除了超链接的出现)。

我最初使用\SpecialUsageIndex将几个宏的描述添加到索引中,因为这些宏的描述在一个table环境中,并且使用DescribeMacro不适用于浮动环境。SpecialUsageIndex似乎已被弃用(?),所以我切换到\SpecialMacroIndex,但无论哪种方式我都有同样的问题。

要点:\SpecialMacroIndex在表格内使用(可能是任何浮动环境)会在命令位置插入额外的垂直空间。无论我在首字母后是否留出空格,或者在行尾%是否包含%或,都会发生这种情况。但是,如果我使用 ltxdoc 的 class 选项关闭 hyperref,则不会看到此行为。\relaxnohyperref

我做错了什么吗(例如,我不应该将其用于\SpecialMacroIndex此目的),如果是的话,正确的方法是什么?

这是一个最小的工作示例:

% \iffalse
%
% To make the example, do this (saved as "reveal-bug.dtx"):
%
% pdflatex reveal-bug.dtx
% makeindex -s gind.ist -o reveal-bug.ind reveal-bug.idx
% pdflatex reveal-bug.dtx
% pdflatex reveal-bug.dtx
%
%<*driver>
\ProvidesFile{reveal-bug.dtx}
%</driver>
%
%<package>\NeedsTexFormat{LaTeX2e}
%
%<*driver>
%^^A\documentclass[nohyperref]{ltxdoc}
\documentclass{ltxdoc}
\PageIndex
\CodelineNumbered
\RecordChanges
\begin{document}
  \DocInput{reveal-bug.dtx}
\end{document}
%</driver>
% \fi
%
% \GetFileInfo{reveal-bug.dtx}
% \title{Test Document}
% \author{Me}
% \date{\filedate}
% \maketitle
%
% \begin{table}
%   \caption{Table with lots of macro descriptions in it.}
%   \SpecialMacroIndex{\abc}\relax
%   \SpecialMacroIndex{\def}\relax
%   \SpecialMacroIndex{\ghi}\relax
%   \SpecialMacroIndex{\jkl}\relax
%   (This is just here to make a table and define its boundaries.)
% \end{table}
% \SpecialMacroIndex{\mno}\relax
% \SpecialMacroIndex{\pqr}\relax
% \SpecialMacroIndex{\stu}\relax
% \SpecialMacroIndex{\vwx}\relax
%
% \StopEventually{\PrintChanges}{\PrintIndex}
%
% \iffalse
%</package>
% \fi
% \Finale
\endinput

将该行更改\documentclass为注释掉的行,并比较两种情况下的第一页以重现此情况。

日志文件中的一些版本信息:LaTeX2e <2022-06-01> 补丁级别 5 L3 编程层 <2022-12-17> 文档类别:ltxdoc 2022/06/22 v2.1h 文档类别:文章 2021/10/04 v1.4n 软件包:doc 2022/06/08 v3.0j

PS 如果有人想要一个不那么简单的工作示例,我正在使用的表格是热力学包文档的表 1 和表 2,可在 CTAN 上找到。

答案1

问题是,使用hypdoc创建目标\llap,而由于您处于垂直模式,它们会卷起。可能hypdoc应该添加一个\leavevmode以切换到水平模式(这在某些地方仍然会导致不必要的空格,但不会太多,无论如何我建议在 hmode 中始终使用索引命令):

% pdflatex reveal-bug.dtx
% makeindex -s gind.ist -o reveal-bug.ind reveal-bug.idx
% pdflatex reveal-bug.dtx
% pdflatex reveal-bug.dtx

\documentclass{ltxdoc}
\PageIndex
\CodelineNumbered
\RecordChanges
\begin{document}
\makeatletter
\def\HD@maketarget{%
  \stepcounter{HD@hypercount}%
  \def\HD@next{%
    \leavevmode% new
    \llap{\hypertarget{HD.\the\c@HD@hypercount}{}\,}%
  }%
  \ifHD@savedest
    \expandafter\ifx\csname HD.\the\c@HD@hypercount\endcsname\@empty
    \else
      \let\HD@next\relax
    \fi
  \fi
  \HD@next
}
\begin{table}
\caption{blub}
\SpecialMacroIndex{\def}\relax
\SpecialMacroIndex{\ghi}\relax
\SpecialMacroIndex{\jkl}\relax
some text
\end{table}
\PrintIndex
\end{document}

相关内容