法语文档中的 autoref 与 TeX4ht 不兼容

法语文档中的 autoref 与 TeX4ht 不兼容

我目前在 Windows 7 上使用 MiKTeX 2.9,无法正确编译法语文档。这是一个非常简单的例子:

\documentclass[francais]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{hyperref}

\begin{document}
Voir \autoref{test}.
\begin{figure}
  \caption{Test}
  \label{test}
\end{figure}
\end{document}

pdflatex 编译此代码时没有任何错误或警告。只有当我指定另一种语言(如 ngerman)时,htlatex 才会产生正确的结果。但是,对于 francais,我收到以下警告:

l.7 --- TeX4ht warning --- \Link{x1-21}? ---
! Missing \endcsname inserted.
<to be read again>
                   \special
l.7 Voir \autoref{test}
                       .

如果我忽略警告,HTML 中的输出如下:

Voir <a
href="#x1-21"><span class="frenchb-nbsp">&nbsp;</span>:autoreffigure1</a>.

看来 babel 激活冒号字符与 TeX4ht 使用的内部命令名称冲突。所以我尝试\shorthandoff{:}在加载 babel 后立即使用,正如建议的那样这里,没有效果。
我还安装了最新版本frenchb.ldfhttp://daniel.flipo.free.fr/frenchb/(在 babel 文档中提到)并使用那里的文档来缓解一些其他问题。但是\noextrasfrench在加载 babel 后再次发出的命令也没有帮助。
然后我直接进行编辑frenchb.ldf——我注释掉了任何包含冒号的\initiate@active@char\declare@shorthand。这产生了正确的结果,但引发了如下警告:

! Missing control sequence inserted.
<inserted text>
                \inaccessible
l.6 \begin{document}

此外,这几乎不是一个永久的解决方案。任何帮助都将不胜感激。

提前致谢。

PS. 仅指定一种不使用 babel 的语言显然会翻译上例中“figure”之类的表达式——有人知道它是如何工作的以及它在多大程度上能够实现国际化/本地化吗?

答案1

当我搜索 babel 源代码(为了找到 中使用的命令的定义frenchb.ldf)时,我偶然发现了包babeltools,它似乎是为解决我的具体问题而制作的(甚至更多)。\usepackage[shorthands=;!?]{babeltools}在加载之前添加babel成功避免了激活冒号字符(其他字符也是 francais 的标准字符,仍然有效)。htlatex 返回一个神秘的错误消息,它不会在批处理模式下显示,显然可以忽略。顺便说一句,当搜索“babel deactivate colon”时,显示的第二个链接指向babeltools——无论出于什么原因,我之前都没有想出这个确切的关​​键字组合……

相关内容