tex4ebook 和 \coverimage[someOptions]{AbsolutePath/someimage.jpg} 不起作用

tex4ebook 和 \coverimage[someOptions]{AbsolutePath/someimage.jpg} 不起作用

\coverimage[someOptions]{AbsolutePath/someimage.jpg}我在文档中使用 tex4ebook ,直接在 之后\begin{document}。但是AbsolutePath不被尊重并且找不到 someimage.jpg,因此在 epub 中不显示。

作为 AbsolutePath,我使用类似的方法C:/Somepath/folder/anotherfolder/someimage.jpg。但在 epub 中没有显示任何图像。

当我使用someimage.jpg位于文件所在的当前文件夹时.tex,它可以工作并且 someimage.jpg 显示在 epub 中。

只有绝对路径不会在 epub 中显示图像。但当然 someimage.jpg 位于 AbsolutePath 文件夹中。

我是否错过了什么需要了解的事情?

似乎

\graphicpath{{PathA/}{PathB/}{C:/folder/anotherfolder/}}

不适用于 tex4ebook。尽管据说所有带有 的选项都\includegraphics[]{}适用于\coverimage[]{}

有办法解决这个问题吗?

答案1

tex4ebook不复制图像,您需要使用构建文件进行复制。我以前处理过类似的情况这个答案,但它无法与 一起正确工作tex4ebook。这是一个修复版本,其中还包含您要使用的其他 DOM 过滤器:

local mkutils = require "mkutils"
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 function fix_img_names(dom)
    for _, img in ipairs(dom:query_selector("img")) do
        local src = img:get_attribute("src")
        if src then
            -- remove path specification
            src = src:match("([^/]+)$")
            img:set_attribute("src", src)
        end
    end
    return dom
end

local process = domfilter {id_colons,fix_img_names}


local function image_copy(path, parameters)
  -- get image basename
  local basename = path:match("([^/]+)$")
  -- if outdir is empty, keep it empty, otherwise add / separator
  local outdir = parameters.outdir == "" and "" or parameters.outdir .. "/"
  -- handle trailing //
  outdir = outdir:gsub("//$","/")
  local output_file = outdir .. basename
  for pos, name in pairs(Make.lgfile.files) do 
    if name == path then
      Make.lgfile.files[pos] = output_file
    end
  end
  mkutils.cp(path, output_file)
end

Make:match("png$", function(path, parameters)
  image_copy(path, parameters)
  -- prevent further processing of the image
  return false
end)

Make:match("jpg$", function(path, parameters)
  image_copy(path, parameters)
  -- prevent further processing of the image
  return false
end)


if mode=="draft" then
  Make:htlatex {}
else
  Make:htlatex {}
  Make:xindy {modules={"duden-utf8"}}
  Make:biber {}
  Make:htlatex {}
  Make:htlatex {}
end



Make:match("html$", process)

有关其工作原理的详细信息请参见上面的链接。

相关内容