[tex4ht] Fwd: Getting rid of <span class="cmr-9"> breaks in footnotes
Michal Hoftich
michal.h21 at gmail.com
Sat Jul 4 15:13:12 CEST 2020
On Sat, Jul 04, 2020 at 07:50:41AM +0200, Jürgen Hubert wrote:
>
>Unfortunately, the problem persisted even after this change. I investigated further by manually editing the EPUB file with Calibre, and it turns out that the problem wasn't actually the </span><span> tags - it was the line break between "the" and "Devil". The empty spaces _also_ seem to be displayed in the popup.
>
>Yes, Amazon - one of the biggest companies in the world with massive amounts of IT resources - is unable to interpret HTML correctly with their "popup footnote" feature.
>
><headdesk>
I am always amazed how bad ebook readers are. The only evolution that
happens is on the hardware side, stuff like backlighting, etc. But the
actual rendering is still awfull and nobody seems to have problem with
that. And then comes stuff like footnotes that are displayed as popups,
instead of, you know, as footnotes are displayed in books for last few
hundreds of years.
And of course, even this awfull way is broken. I lost my hope in ebooks
long ago, but this is another level.
>
>So, uhm, do you see any way of eliminating this line break and the unnecessary empty spaces while compiling the EPUB file?
>
>Otherwise I will just have to resign myself to either trying to fix this via half-remembered Unix regex commands (wince) or fixing my footnotes manually (double wince). It will be a chore, but it won't prevent publication...
>
Fortunatelly, we can use make4ht build files. Using the built-in XML
processing, it is easy to normalize white spaces inside footnotes:
---------
local domfilter = require "make4ht-domfilter"
local function process_footnote(footnote)
for _, node in ipairs(footnote:get_children()) do
if node:is_text() then
-- replace multiple white space with just obe space
node._text = node._text:gsub("%s+", " ")
elseif node:is_element() then
-- recursivelly process child elements, like italics etc.
process_footnote(node)
end
end
return footnote
end
local process = domfilter {
function(dom)
for _, footnote in ipairs(dom:query_selector(".footnote-text")) do
process_footnote(footnote)
end
return dom
end
}
Make:match("html$", process)
----------
Save it as for example `mybuild.lua` and require using the `-e` option.
Best regards,
Michal
More information about the tex4ht
mailing list.