![tex4ebook - 将输出的编码更改为 latin1](https://linux22.com/image/426999/tex4ebook%20-%20%E5%B0%86%E8%BE%93%E5%87%BA%E7%9A%84%E7%BC%96%E7%A0%81%E6%9B%B4%E6%94%B9%E4%B8%BA%20latin1.png)
我的 tex4ebook 电子书采用 utf8 格式。然而,在 Kindle 预览中,字符无法正确显示。事实上,Kindle 出版似乎需要 latin1 编码... (https://kdp.amazon.com/en_US/help/topic/G200652310) 。
如果我在 tex 标头中放入 \usepackage[latin1]{inputenc},tex4ebook 输出(xhtmls)仍为 utf8(与 tex 文件编码无关)。如果我使用 calibre 将 epub 转换为 latin1,结果也不令人满意。
有没有办法告诉 tex4ebook 创建 latin1 输出?或者我应该手动转换所有 xhtml,然后以某种方式重建 epub?
亲切的问候
答案1
我不认为这个问题是由编码引起的,我很确定 Kindle 支持编码。但无论如何,使用构建文件和过滤器UTF-8
更改 HTML 文件的编码并不难。make4ht
将以下代码保存为mybuild.lua
:
local filter = require "make4ht-filter"
local process = filter {
function(s)
return s:gsub("charset=utf%-8", "charset=ISO 8859-1")
end
}
Make:match("html$", "iconv -f utf-8 -t latin1 ${filename}")
Make:match("html$", process)
这两个Make:match
命令将修改每个输出 HTML 文件。
Make:match("html$", "iconv -f utf-8 -t latin1 ${filename}")
此命令使用 Iconv 命令将 HTML 文件从 转换utf8
为。latin 1
Make:match("html$", process)
此命令调用process
函数来修改 HTML 文件。我们需要更改 HTML 文件中指定的编码。我们可以使用简单的 Lua 字符串替换命令:
local process = filter {
function(s)
return s:gsub("charset=utf%-8", "charset=ISO 8859-1")
end
}
该filter
命令由库提供make4ht-filter
,它可以链接多个函数来更改已处理文件的内容然后保存它。
使用编译
tex4ebook -e mybuild.lua filename.tex
示例 TeX 源:
\documentclass{article}
\begin{document}
diacritics: òíéú
\end{document}
生成的 HTML 文件:
<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns='http://www.w3.org/1999/xhtml'>
<head><title></title>
<meta content='text/html; charset=ISO 8859-1' http-equiv='Content-Type' />
<meta content='TeX4ht (https://tug.org/tex4ht/)' name='generator' />
<meta content='TeX4ht (https://tug.org/tex4ht/)' name='originator' />
<!-- xhtml,charset=ISO 8859-1,epub,uni-html4,html -->
<meta content='sample.tex' name='src' />
<link type='text/css' href='sample.css' rel='stylesheet' />
</head><body>
<!-- l. 3 --><p class='noindent'>diacritics: òíéú </p>
</body></html>