使用最新的 tex4ebook 和 texlive 2020 在目录中添加双参考书目条目

使用最新的 tex4ebook 和 texlive 2020 在目录中添加双参考书目条目

这是这个问题

样本.tex:

\documentclass[ebook,12pt,oneside,openany]{memoir}

\begin{filecontents}{test.bib}
@book{Hiemenz,
author={Hiemenz},
title={Polymer Chemistry}
}
\end{filecontents}

\usepackage{biblatex}
\bibliography{test}

\title{Book}
\author{Author}
\date{}

\begin{document}

\maketitle

\tableofcontents \newpage

\chapter{C1}

Here comes a quotation \cite{Hiemenz}.

\printbibliography

\end{document}

mybuild.mk4:复制代码

Make:add("biber","biber ${input}")
Make:htlatex {}
Make:biber {}
Make:htlatex {}
Make:htlatex {}
Make:htlatex {}

命令:

tex4ebook -e mybuild.mk4 sample.tex

这为目录中的参考书目提供了两个条目(见图)。

电子书目录

它曾经在 Texlive 2019 等早期版本中运行。

如何解决这个问题,谢谢。

更新:

使用@michal.h21 建议的配置文件仍然存在内容问题,因为内容中没有显示参考书目:

texlive 2020

在 texlive 2019 上运行良好(没有配置文件):

texlive 2019

更新 2:

以下是我使用新构建文件所获得的内容。

构建文件的新版本结果

参考书目不见了。还有一个小错误 - 1 C1 在目录中显示为 1C1。

另外,据我所知,修复是否必须在构建文件中而不是 tex4ebook 源中。我认为如果用户不必向构建文件添加内容,那么对他来说会更容易。

再次感谢。

答案1

编辑:看来我原来的解决方案也从目录中删除了参考书目,这是不希望的

以下是使用make4ht构建文件的替代方法:

local domfilter = require "make4ht-domfilter"
local filter = require "make4ht-filter"

-- process the NCX file, it contains bookmarks
local ncxprocess = domfilter {
  function(dom)
    for _, navpoint in ipairs(dom:query_selector("navPoint")) do
       -- get section text, trim spaces and make it lowercase
       local text = navpoint:query_selector("text")[1]:get_text():gsub("^%s*", ""):gsub("%s*$", ""):lower()
       -- match bibliography
       if text == "bibliography" then
         -- remove first bibliography node
         navpoint:remove_node()
         -- and break processing. the second bibliography booksmark will be preserved
         break
       end
    end
    for _, el in ipairs(dom:query_selector("text")) do
      local text = el:get_text()
      -- replace element text with a new text node containing original text
      el._children = {el:create_text_node(text)}
    end

    return dom
  end
}

local ncxclean = filter {
  function(s)
    -- remove unvanted spaces at the start of the NCX file
    local s=s:gsub("^%s*", ""):gsub("%s*$", "")
    return s
  end
}

Make:add("biber","biber ${input}")

-- use tex4ebook -m draft to speed up compilation, it is not necessary to execute biber and multiple LaTeX calls
-- every time you compile the document
if mode=="draft" then
  Make:htlatex {}
else
  Make:htlatex {}
  Make:biber {}
  Make:htlatex {}
  Make:htlatex {}
  Make:htlatex {}
end

-- the NCX file at this point is not valid XML, we need to clean it using Tidy first
-- Make:match("ncx$", "tidy -m -xml -utf8 -q -i ${filename}")
Make:match("ncx$", ncxclean)
-- remove bibliography
Make:match("ncx$", ncxprocess)

它使用 LuaXML DOM 处理方法找到第一个参考书目部分并将其从书签中删除。


TeX4ebook 将所有分段命令(包括带星号的版本)添加到书签中。Memoir 使用带星号的命令,但除此之外,它还会将参考书目添加到目录中。您可以使用此配置文件禁用附加目录条目:

\Preamble{xhtml}
\begin{document}
\nobibintoctrue
\EndPreamble

生成的书签:

在此处输入图片描述

相关内容