在 make4ht 转换为 HTML 期间复制图像并链接到它们

在 make4ht 转换为 HTML 期间复制图像并链接到它们

我使用这样的命令来生成 HTML 文件并将其保存在目录中./html

make4ht -x -f html5 -d html doc1.tex

例如,本文档

\documentclass{article}
\usepackage{graphicx}
\begin{document}
This is a test.
\includegraphics{../Figures/image.png}
\end{document}

使用上述命令进行转换时会生成./html/doc1.html如下内容的文件:

<!DOCTYPE html> 
<html lang='en-US' xml:lang='en-US'> 
<head><title></title> 
<meta charset='utf-8' /> 
<meta content='TeX4ht (https://tug.org/tex4ht/)' name='generator' /> 
<meta content='width=device-width,initial-scale=1' name='viewport' /> 
<link href='doc1.css' rel='stylesheet' type='text/css' /> 
<meta content='doc1.tex' name='src' /> 
</head><body>
<!-- l. 4 --><p class='noindent'>This is a test. <img alt='PIC' src='../Figures/image.png' />
</p>
</body> 
</html>

我希望 HTML 文件中的 img 标签指向image.png本地目录中的文件./html,即 ,并将图形文件复制到./html/image.png。这样我就可以压缩./html目录并共享它,而不必担心丢失图形文件。这可能吗?如果可以,怎么做?我使用的是 Linux(Ubuntu)。

答案1

尝试这个构建文件:

local mkutils = require "mkutils"
local domfilter = require "make4ht-domfilter"

local process = domfilter{
  function(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 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
  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("html$", process)

它做两件事——首先,它从中删除文件路径<img src="path/image.png">;其次,它将 png 图像复制到输出目录。

如果您想要创建包含所有输出文件(包括图像)的目录,您可以使用以下命令:

make4ht -e build.lua -xd html doc1.tex

这是最终的 HTML:

<!--  l. 5  --><p class='noindent'>This is a test. <img alt='PIC' src='image.png' />
</p>

以及目录列表html

-rw-r--r--. 1 michal michal 4411  7. zář 23.11 image.png
-rw-rw-r--. 1 michal michal 6067  7. zář 23.11 doc1.css
-rw-rw-r--. 1 michal michal  473  7. zář 23.11 doc1.html

相关内容