如果我在加载 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 日更新-- 的维护者tex4tht
和htlatex
可执行程序的@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}