tex4ebook - 将输出的编码更改为 latin1

tex4ebook - 将输出的编码更改为 latin1

我的 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>

相关内容