tex4ht + biblatex + 非 ascii 字符 = html 文件中的混合编码

tex4ht + biblatex + 非 ascii 字符 = html 文件中的混合编码

我有这种情况

  • 带有宏的 LaTeX 文件,通常由 tex4ht 转换为 unicode 字符(例如\ldots变成
  • 作者姓名中包含非 ASCII 字符的引文(例如í中的Albarracín
  • 我想用 htlatex 生成一个 xhtml 文件

该过程有效,但生成的文件有一个用 utf-8 编码的字符(latex 宏),作者姓名中的非 ascii 字符用 latin-1 编码。据我所知,htlatex 包含 bbl 文件,读取时就像是在 latin-1 中一样。

我能做些什么来修复这个问题?:)
(我正在努力pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022/Arch Linux)

这是一个 mwe,下面是我运行的命令:

%% File mwe.tex
\documentclass{article}

\usepackage[backend=biber]{biblatex}

\begin{filecontents}{\jobname.bib}
@Article{Albarracin2000,
year = {2000},
volume = {1},
issue = {2},
pages = {3},
author = {Anyone Albarracín},
title = {A beautiful paper.},
journaltitle = {Some Journal}
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

I Am a Scientist\ldots\ Ask Me Anything
\parencite{Albarracin2000}

\printbibliography

\end{document}
htlatex mwe.tex "xhtml" "-cunihtf -utf8" "" ""
biber mwe
htlatex mwe.tex "xhtml" "-cunihtf -utf8" "" ""

结果

$ file mwe.html
mwe.html: XML 1.0 document, Non-ISO extended-ASCII text
$ grep -a -e 'Anyone Albarra' -e Scientist --color mwe.html 
<!--l. 22--><p class="noindent" >I Am a Scientist… Ask Me Anything [<a 
    <!--l. 26--><p class="noindent" >Anyone Albarrac�n. &#8220;A beautiful paper.&#8221; In: <span 

答案1

支持utf8是 解决的问题之一make4ht。如果您使用以下方式编译文件:

$ make4ht mwe.tex

它将utf8默认生成文件。

如果你想使用htlatex,你可以使用这个:

$ htlatex mwe.tex "xhtml,charset=utf-8" " -cunihtf -utf8"

进行了两项重大修改。首先,通过包含charset=utf-8在选项列表中,HTML 文件的编码已更改,使浏览器能够正确显示重音字符。其次,用-cunihtf空格分隔开头的引号和 至关重要;否则,选项将被忽略,导致文件编码错误。

我仍然建议使用make4ht,因为它更易于使用,并且还修复了其他问题。例如,您可以创建一个构建文件,build.lua它将根据请求编译参考书目:

if mode == "draft" then
  Make:htlatex {}
else
  Make:htlatex {}
  Make:biber {}
  Make:htlatex {}
  Make:htlatex {}
end

现在,你可以像这样使用它:

$ make4ht -e build.lua mwe.tex

它会自动调用biber并运行 LaTeX 两次,以修复所有交叉引用。如果您想加快编译速度,可以使用draft仅运行一次 LaTeX 的选项,从而实现更快的编译速度:

$ make4ht -e build.lua -m draft  mwe.tex

结果如下:

在此处输入图片描述

相关内容