这是相关的,但据我所知,与关于python:从make4ht到odt格式的utf-8输出。
我正在使用make4ht
将 LaTeX 文档转换为 ODT,其中有一些方程式包含一些非 ascii 字符的文本,到目前为止我还没有能够获得良好的结果。
请考虑以下文档:
\documentclass{article}
\usepackage{amstext}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tgpagella}
\begin{document}
\[
\frac{importação}{consumo}
\]
\[
\frac{\text{importação}}{\text{consumo}}
\]
\[
\frac{\text{importa\c{c}\~ao}}{\text{consumo}}
\]
\[
\frac{\mbox{importação}}{\mbox{consumo}}
\]
\[
\frac{\textrm{importação}}{\textrm{consumo}}
\]
\[
\frac{\textnormal{importação}}{\textnormal{consumo}}
\]
\end{document}
构建它:
make4ht -f odt document.tex
odt中的结果如下:
其背后,我们有:
对于没有任何文本命令的方程式:
在 .odt 文件中:(
{i m p o r t a ç ã o} over {c o n s u m o}
因此每个字符都添加一个空格)在
content.xml
.odt 中对应方程为:
<math:mfrac><math:mrow><math:mi>i</math:mi><math:mi>m</math:mi><math:mi>p</math:mi><math:mi>o</math:mi><math:mi>r</math:mi><math:mi>t</math:mi><math:mi>a</math:mi><math:mi>ç</math:mi><math:mi>ã</math:mi><math:mi>o</math:mi></math:mrow> <math:mrow><math:mi>c</math:mi><math:mi>o</math:mi><math:mi>n</math:mi><math:mi>s</math:mi><math:mi>u</math:mi><math:mi>m</math:mi><math:mi>o</math:mi></math:mrow></math:mfrac> </math:math>
(我的解释是,这里的每个字母都被视为一个变量并放在相应的<math...>
环境中。因此,尽管输出结果不同,但最终可能会被认为是正确的)。
对于所有其他形式(即,使用数学模式内的文本命令):
在 .odt 文件中:(
"o" over "consumo"
因此,缺少括号(我不确定它们是否是必需的),最重要的是,缺少部分文本)在
content.xml
相应的方程中:
<math:mfrac><math:mrow><math:mstyle><math:mtext>importação</math:mtext></math:mstyle></math:mrow> <math:mrow><math:mstyle><math:mtext>consumo</math:mtext></math:mstyle></math:mrow></math:mfrac>
因此,文本实际上存在,但 LibreOffice 不会呈现该文本。如果我直接content.xml
使用编辑其中任何一个importação
并重新打包,.odt 文件就会损坏。
那么,如何才能在 ODT 输出的数学模式下获得更好的文本结果,特别是使用上面的一些文本命令?
答案1
这似乎是 LibreOffice 的一个错误,它显然对编码为 XML 实体的 Unicode 字符存在问题,因为它只呈现实体后面的部分单词。将实体转换为字符似乎可以解决这个问题,因此我们可以重用我的上一个答案对于数学也做转换:
local filter = require "make4ht-filter"
local utfchar = unicode.utf8.char
local process = filter {
function(content)
return content:gsub("%&%#x([A-Fa-f0-9]+);", function(entity)
-- convert hexadecimal entity to Unicode
print(entity,utfchar(tonumber(entity, 16)))
return utfchar(tonumber(entity, 16))
end)
end
}
Make:match("4oo$", process)
Make:match("4om$", process)
数学保存在带有4om
扩展名的文件中,因此此构建文件也会对带有该扩展名的文件执行转换过程。结果看起来不错: