如果加载了 caption 包,则使用 htlatex 时 autoref 将无法正常工作

如果加载了 caption 包,则使用 htlatex 时 autoref 将无法正常工作

如果我在加载 caption 包时使用 autoref,则使用 htlatex 生成 html 时目标类型不会出现在引用中。如果我使用 pdflatex,autoref 可以按预期工作。

以下是一个示例文档:

\documentclass{book}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{caption}

\begin{document}

See \autoref{tab:example} or \autoref{fig:seahorse}.

\begin{table}[ht]
\caption{A Table}
\centering
\begin{tabular}{l l}
    Col 1   & Col 2 \\
    \hline
    a       & 1 \\
    b       & 2 \\
    c       & 3 \\
  \end{tabular}
  \label{tab:example}
\end{table}

\begin{figure}[ht]
\centering
\caption{Seahorse}
\label{fig:seahorse}
\includegraphics[width=\textwidth]{hippocampus.jpg}
\end{figure}
\end{document}

这是我使用 htlatex 得到的输出:

如果我不导入标题包,则会生成包含目标类型和参考编号的参考文献(文本显示“参见表 1 或图 1”)。

答案1

TeX4ht 的支持中似乎缺少对该\autoref功能caption的支持。我们需要为每个设置新标签的命令提供一些定义。

尝试这个.cfg文件:

\Preamble{xhtml}
\catcode`\:=11
\makeatletter
\pend:defIII\caption@beginex{%
  \gdef\NR:Type{\@currenvir}%
  \gdef\NR:Title{\a:newlabel{##2}}%
} 
\makeatother
\catcode`\:=12
\begin{document}
\EndPreamble

重要的部分是这样的:

\pend:defIII\caption@beginex{%
  \gdef\NR:Type{\@currenvir}%
  \gdef\NR:Title{\a:newlabel{##2}}%
} 

是Caption 包\caption@beginex调用的内部命令。我们为 TeX4ht 插入两个命令,保存当前环境名称和。由于需要三个参数,我们使用命令来修补它。\caption\NR:Type\NR:Title\caption@beginex\pend:defIII

编译使用:

make4ht -c mycfg.cfg filename.tex

结果如下:

在此处输入图片描述

答案2

2021 年 2 月 4 日更新-- 的维护者tex4ththtlatex可执行程序的@michal.h21 已向 CTAN 发布了补丁。 的问题行为\autoref已消失。


这里有一个修复方法,它不是一个完整的解决方案,而是一个变通方法:不要使用包\autoref的命令hyperref;而是使用包\cref的宏cleveref。如果你采用这种方式,一定要加载cleveref hyperref

\cref它的一个很好的优点\autoref是它可以接受多个参数——并且可以很好地对参数进行排序。

\autoref下面的屏幕截图显示了第 1 行和\cref第 2 行的输出。

在此处输入图片描述

\documentclass{book}
%\usepackage{graphicx} % not needed for this MWE
\usepackage{caption}
\usepackage{hyperref}
\usepackage[nameinlink,capitalize,noabbrev]{cleveref} % load this package _last_

\begin{document}
\autoref{tab:example}, \autoref{fig:example}

\cref{tab:example}, \cref{fig:example}; \cref{tab:example,fig:example,tab:example2}

\begin{table}[ht]  \caption{A Table}       \label{tab:example}  \end{table}
\begin{figure}[ht] \caption{A Figure}      \label{fig:example}  \end{figure}
\begin{table}[ht]  \caption{Another Table} \label{tab:example2} \end{table}
\end{document}

相关内容