make4ht/ODT:调整图像大小

make4ht/ODT:调整图像大小

关于使用 调整图像大小的问题已经出现了几个ht4leax/make4ht,但不知何故,似乎没有一个答案能够解决我的问题。

考虑以下 MWE

\documentclass{article}
\usepackage{graphicx}
\RequirePackage[]{fontspec} 
\begin{document}
\begin{figure}
\includegraphics[width=\textwidth]{test.jpg}
\end{figure}
\end{document}

我使用以下make4ht调用来编译该文档以创建一个.odt文件:

make4ht -l -u -f odt 测试.tex

我尝试了各种不同的配置文件,尝试了没有文件和没有.xbb文件的情况,但无论我做什么,给出的参数\includegraphics都会被忽略,并且最终文档中嵌入图像的大小保持不变。

答案1

图像尺寸本身设置正确,但它嵌入在draw:frame尺寸错误的元素中。我发现这个尺寸是由 Xtpipes 插入的,它从图像文件本身读取图像尺寸并忽略 TeX 文件中设置的尺寸:

<draw:frame draw:name="film.jpg" text:anchor-type="as-char" draw:z-index="0" svg:width="41pt" svg:height="41pt"><draw:image xlink:href="Pictures/film.jpg" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad" svg:width="345.0pt" svg:height="345.1135pt"/><!--draw:name="IMG"                                                                         
 svg:width="345.0pt" svg:height="345.1135pt"                                                                                                                                                                    
 --></draw:frame>

可以使用make4ht过滤器将元素中的尺寸设置draw:frame为与中的尺寸相同draw:image。尝试以下构建文件:

local domfilter = require "make4ht-domfilter"

local domprocess = domfilter {
  function(dom)
    print("process images")
    local frames  = dom:query_selector("draw|frame")
    print("frames", #frames)
    for _, frame in ipairs(frames) do
      local images = frame:query_selector("draw|image")
      if #images > 0 then
        local image = images[1]
        local width = image:get_attribute("svg:width")
        local height = image:get_attribute("svg:height")
        frame:set_attribute("svg:width", width)
        frame:set_attribute("svg:height", height)
        print("image dimensions", width, height)
      end
    end
    return dom
  end
}

Make:match("4oo", domprocess)

仍然需要xbb使用

ebb -x test.jpg

示例结果:

在此处输入图片描述

相关内容