当 latex 图形转换为 html 时,htlatex 会生成如下标记:
<a id="x3-3021r4"></a>
<p class="noindent" >
<img src="sampleImage.png" alt="PIC"/>
</p>
<div class="caption">
<span class="id">Abbildung 7:</span>
<span class="content">Sample Image</span>
</div>
是否有可能,例如通过配置文件中的钩子和参数,以这样的方式改变输出,使得生成的标记代码如下所示?
<a id="x3-3021r4" href="/sampleImage.png" title="Sample Image">
<img src="/sampleImage.png" alt="PIC"/>
</a>
</p>
<div class="caption">
<span class="id">Abbildung 7:</span>
<span class="content">Sample Image</span>
</div>
问候,克里斯
编辑:添加了 MWE 并修改了所需的输出(锚点还应包含带有标题内容的“标题”属性,并且图像路径应以斜杠开头)
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[final]{graphicx}
\begin{document}
\begin{figure}
\centering
\includegraphics{sampleImage.png}
\caption{My sample image}
\label{fig:mysampleimage}
\end{figure}
\end{document}
代码编译如下:
htlatex.bat src.tex "html"
答案1
这个问题比看上去要复杂得多。似乎标签插入于figure
环境插入的,但我找不到如何以您想要的方式配置它。在这种情况下,我建议使用制作4小时过滤功能。make4ht
是简化使用的简单构建工具tex4ht
。
过滤器是修改输出的 lua 函数。对于你的情况,它可能是这样的 make 文件src.mk4
:
local filter = require "make4ht-filter"
local atoim = function(s)
local id = nil
return s:gsub("<([%a/]+)(%s*)([^>]-)>", function(tag, space, par)
if tag == "a" then
id = par:match("^id=[\"']([^\"^']+)[\"']")
if id then return '' end
elseif tag=='/a' and id then
return ''
elseif id then
par = 'id="'..id..'"'
id = nil
end
return '<'..tag ..space .. par..'>'
end
)
end
local process = filter{"cleanspan", "fixligatures", "hruletohr", atoim}
Make:htlatex()
Make:htlatex()
Make:match("html$",process)
现在你可以使用
make4ht src
atoim
所有标签都用函数进行处理,<a id="something"></a>
丢弃并id
保存值,id
然后插入到下面的元素中。
生成的 html 如下所示:
<!--l. 10--><p id="x1-21"><img
src="sampleImage.png" alt="PIC"
/>
<br /> </p>
请注意,id
属性可以放在任何元素上,它将为超链接提供目标,没有必要使用<a id
。
编辑
对于您的用例,必须使用更复杂的功能。也许有知识的人xslt
会找到更优雅的解决方案:-)。
local filter = require "make4ht-filter"
local atoim = function(s)
local id = nil
local used_id = {}
local captions = {}
local tag_patt = "<([%a/]+)(%s*)([^>]-)>"
local attr_pat = "%s*=%s*[\"']([^\"^']+)[\"']"
s:gsub('<span class="content">(.-)</span></div><%!%-%-tex4ht%:label%?: (.-) %-%->', function(caption,id)
captions[id]=caption
end)
local r1 = s:gsub(tag_patt, function(tag, space, par)
if tag == "a" then
id = par:match("^id"..attr_pat)--=[\"']([^\"^']+)[\"']")
elseif id and tag == "img" then
used_id[id] = true
local src = par:match("src"..attr_pat)
local name = captions[id] or ""
local img = string.format('<a href="%s" id="%s" title="%s"><img %s></a>', src, id, name, par)
id = nil
return img
end
return '<'..tag ..space .. par..'>'
end
)
local a = false
return r1:gsub(tag_patt, function(tag, space, par)
if tag == "a" then
local id = par:match("id"..attr_pat)
if id and used_id[id] then
used_id[id] = nil
a = true
return ""
end
elseif tag == "/a" and a then
a = false
return ""
end
return '<'..tag ..space .. par..'>'
end
)
end
local process = filter{"cleanspan", "fixligatures", "hruletohr", atoim}
Make:htlatex()
Make:htlatex()
Make:match("html$",process)
使用三遍方法,第一遍我们找到给定 id 的标题,第二遍标签id
并<a>
在 img 周围创建元素,最后一遍,我们删除旧<a>
元素
生成的 html:
<!--l. 9--><p class="noindent" ><a href="sampleImage.png" id="x1-21" title="My sample image"><img src="sampleImage.png" alt="PIC"
/></a>
<br /> </p>