我目前在 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"> </span>:autoreffigure1</a>.
看来 babel 激活冒号字符与 TeX4ht 使用的内部命令名称冲突。所以我尝试\shorthandoff{:}
在加载 babel 后立即使用,正如建议的那样这里,没有效果。
我还安装了最新版本frenchb.ldf
的http://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
——无论出于什么原因,我之前都没有想出这个确切的关键字组合……