简单问题:当我使用cleveref
和\Cref{}
或时,\cref{}
我能够编译代码并生成 PDF。当我使用时,htlatex
我得到??
的是我期望的对象名称和部分编号。
按照 MWE 发现的示例的修改形式 我怎样才能使 cleveref 中的 \cref{foo,bar} 与 htlatex 一起工作?htlatex
如下所示,我想弄清楚一起使用和的要求cleveref
是什么?我确信在过去几周尝试让它工作时,我偶然发现了成功编译的 html 文件,其中包含或\cref{}
命令所需的文本和数字\Cref{}
,但从未采用稳定可重现的格式。
\documentclass{report}
\ifdefined\HCode
\usepackage{tex4ht}
\usepackage[tex4ht]{hyperref}
\else
\usepackage{hyperref}
\fi
\usepackage{etoolbox}
\AtEndPreamble{\usepackage{cleveref}}
\begin{document}
\section{\label{foo}foo}
%\cref{bar,baz} - this won't compile but the problem is deeper rooted because cref alone doesn't work.
%\protect\cref{foo}
\cref{baz} follows \cref{bar}
\section{bar}\label{bar}
\section{baz}\label{baz}
\end{document}
我也尝试过这个例子(稍微修改了一下并加入了解决方案)我怎样才能让 amsthm 和 cleveref 与 htlatex 一起工作?
\documentclass{article}
\usepackage{hyperref}
\usepackage{amsthm}
\AtBeginDocument{\usepackage{cleveref}}
\newtheorem{thm}{Theorem}[section]
\newtheorem{rmk}[thm]{Remark}
\begin{document}
\begin{rmk}\label{test}
Test content
\end{rmk}
See the test found in \cref{test}
\end{document}
因此,在收集足够的信息来了解为什么这不起作用时,我想知道:
是否有
cleveref
类似的选项\usepackage[tex4ht]{hyperref}
应该使用是否存在已知的错误或兼容性问题 -为什么 htlatex 不能按预期工作?
是否有一个可以添加到基本且缺失的命令行选项
htlatex test.tex
(由于参考了我的第二个示例,我对这种可能性表示怀疑。如果这里的解决方案是确保cleveref
在序言中最后加载,并且我明显的??
出现在实际引用的位置的问题存在,那么我相信它会被跟进。
答案1
我认为你的例子不必要地复杂,这也应该可行:
\documentclass{report}
\usepackage{hyperref}
\usepackage{cleveref}
\begin{document}
\section{foo}\label{foo}
\cref{sec:bar,sec:baz} - this won't compile but the problem is deeper rooted because cref alone doesn't work.
%\protect\cref{foo}
\Cref{sec:baz} follows \cref{sec:bar} and \cref{foo}
\section{bar}\label{sec:bar}
\section{baz}\label{sec:baz}
\end{document}
cleveref
现在做一点技术描述:和的问题tex4ht
是cleveref
使用保存的引用类型的信息创建内部引用。此信息保存在宏中\cref@currentlabel
,该宏用 声明\protected@edef
。这意味着它只在当前组中定义,这不会导致普通 LaTeX 出现问题,但是在 下tex4ht
,由于一些重新定义,该宏在组中定义,后来在将信息保存到文件时未定义aux
。我们需要用 替换\protected@edef
,\protected@xdef
以便信息在当前组之外可用。
解决方案是为 制作配置文件cleveref
。使用时cleveref.4ht
会自动包含此文件:tex4ht
cleveref
\def\refstepcounter@noarg#1{%
\cref@old@refstepcounter{#1}%
\cref@constructprefix{#1}{\cref@result}%
\@ifundefined{cref@#1@alias}%
{\def\@tempa{#1}}%
{\def\@tempa{\csname cref@#1@alias\endcsname}}%
\protected@xdef\cref@currentlabel{%
[\@tempa][\arabic{#1}][\cref@result]%
\csname p@#1\endcsname\csname the#1\endcsname}
}%
\def\refstepcounter@optarg[#1]#2{%
\cref@old@refstepcounter{#2}%
\cref@constructprefix{#2}{\cref@result}%
\@ifundefined{cref@#1@alias}%
{\def\@tempa{#1}}%
{\def\@tempa{\csname cref@#1@alias\endcsname}}%
\protected@edef\cref@currentlabel{%
[\@tempa][\arabic{#2}][\cref@result]%
\csname p@#2\endcsname\csname the#2\endcsname}}%
将文件放入cleveref.4ht
文档目录中。
结果: