在使用命令运行 biblatex 时,我在之后\nocite
运行时收到以下错误消息。epubcheck
tex4ebook
ERROR(RSC-005): Testfile.epub/OEBPS/Testfileli3.html(19,88): Validierungsfehler: Der Wert des Attributs "id" ist ungültig; es muss ein XML-Name ohne Doppelpunkte sein
Translated:
validation error: The value of attribute "id" is invalid; is has to be a XML-name without colon
MWE 如下所示,但它仅重现了 1 次错误。在我的 sourcefile.tex 中,我得到了 175 个 \nocite 命令,并使用 epubcheck 得到了 173 条相同的错误消息。
\documentclass[11pt,a4paper]{report}
\usepackage{ebgaramond-maths}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{tex4ebook}
\usepackage[sortlocale=auto,bibstyle=authoryear,citestyle=authortitle-ticomp]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\nocite{sigfridsson}
\nocite{westfahl:space}
\nocite{set}
\nocite{stdmodel}
\nocite{aksin}
\nocite{bertram}
\printbibliography
\end{document}
有解决办法吗?-->有,请参阅答案 1。它可以将 epubcheck 错误数从 123 减少到 20。
更新 1
我现在还剩下 20 个 epubcheck 错误,它们似乎都与命令有关\pageref{somelabel}
。epubcheck 给出ERROR(RSC-012) Fragmentbezeichner ist nicht angegeben
并指向 html 文件中的以下示例(共 20 个):
(wie vorangehend, bei Andrej
Sacharow<a id='dx17-18004'></a> ab Seite <a href='#x11-12001r9'>249<!-- tex4ht:ref: AndrejSacharow --></a>, gesehen und angedeutet)
并指向页码“249”。但这\pageref
位于普通正文中,没有嵌入其他命令和环境中。
到目前为止,还无法在 MWE 中重现 epubcheck 错误。
答案1
这个问题应该由 DOM 过滤器修复make4ht
,但我发现这个特定的过滤器有问题。我已经在make4ht
源代码中修复了这个问题,但如果你不想更新它,你可以改用这个构建文件:
local domfilter = require "make4ht-domfilter"
local allowed_chars = {
["-"] = true,
["."] = true
}
local function fix_colons(id)
-- match every non alphanum character
return id:gsub("[%W]", function(s)
-- some characters are allowed, we don't need to replace them
if allowed_chars[s] then return s end
-- in other cases, replace with underscore
return "_"
end)
end
local function id_colons(obj)
-- replace : characters in links and ids with unserscores
obj:traverse_elements(function(el)
local name = string.lower(obj:get_element_name(el))
if name == "a" then
local href = el:get_attribute("href")
-- don't replace colons in external links
if href and not href:match("[a-z]%://") then
local base, id = href:match("(.*)%#(.*)")
if base and id then
id = fix_colons(id)
el:set_attribute("href", base .. "#" .. id)
end
end
end
local id = el:get_attribute("id")
if id then
el:set_attribute("id", fix_colons(id))
end
end)
return obj
end
local process = domfilter {id_colons}
Make:match("html$", process)
编译使用:
我还发现了另一个问题,那就是 DOI 编号格式错误。可以使用此配置文件修复:
\Preamble{xhtml}
\def\nolinkurl#1{#1}
\begin{document}
\EndPreamble
编译使用:
$ tex4ebook -e build.lua -c config.cfg filename.tex
结果如下: