epubcheck 出现错误

epubcheck 出现错误

现在,我正在尝试使用该程序验证生成的 epub 文件epubcheck,该程序我已正确安装并已成功用于使用 tex4ebook 生成的其他新生成的 epub 文件。

但是现在,我在验证较大的 epub 文件(包含目录和索引)时收到一条错误消息(或 9 条几乎相同的消息)。

错误信息是德语的,内容是:

filename.epub/pathnameli1.html(12,38): Validierungsfehler: Der Wert des Attributs "id" ist ungültig; es muss ein XML-Name ohne Doppelpunkte sein

翻译:

filename.epub/pathnameli1.html(12,38): validation error: the value of attribute "id" is not valid; it needs to be a XML-name without colon.

我针对 pathnameli3.html、pathnameli5.html、...、pathnameli17.html 都遇到了此问题。总共有“9 个错误”。

当我打开 pathnameli3.html 时,我发现以下引用“id”的行:

...
 <h2 class='likechapterHead' id='1'><a id='x5-3000'></a></h2>
...

关于 filename.tex 源,它显然指的是带有 toc 的第一页。到目前为止,我无法在 MWE 中重现错误。也许有人可以从中得到一些提示。可能出了什么问题?如何验证 epub 是否为“0 错误”?

编辑1

我查看了 pathnameli1.html(产生错误)和 pathnameli2.html(不会产生错误)。

我发现,17 以内的奇数会产生 9 条上述类型的错误消息。偶数(2、4、6、8、10、12、14、16)如下:

2:<h2 class='likechapterHead' id='vorwort'><a id='x3-2000'></a>Vorwort</h2>

它们偶数代表\chapter*{}document.tex 的所有命令

然后我查看了chapterdocument.tex 中的这些命令,发现\cleartooddpage命令并认为它与问题有关,并将其更改为\clearpage。但错误仍然存​​在。

我不明白 pathnameli1.html 等奇数。它们是在 document.tex 的哪里生成的?但它们最终确实随 tex4ebook 一起出现?

相关document.tex部分如下:

\cleartooddpage
\chapter*{Vorwort}
\ifdefined\HCode
\else\phantomsection\addcontentsline{toc}{chapter}{Vorwort}
\fi
\pagenumbering{arabic}
\thispagestyle{empty}
\pagestyle{Vorwort}

编辑 2-完整示例

这是完整的例子:

\documentclass[11pt,a4paper]{report}
\usepackage{ebgaramond-maths}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\usepackage{nextpage}
\usepackage{tex4ebook}
\providecommand\phantomsection{}
\ifdefined\HCode
\usepackage[xindy,noautomatic]{imakeidx}
\else
\usepackage[]{imakeidx}
\fi
\makeindex[intoc=false,columns=1,noautomatic,title=Alphabetisches Verzeichnis]
\ifdefined\HCode
\usepackage[hyperindex=true,
pdfauthor={Autor},
pdftitle={Titel},
pdfkeywords={Keyword}]{hyperref}
\else\fi
\fancypagestyle{Inhaltsverzeichnis}{\fancyhf{}%
    \fancyhead[RO,LE]{\small\rmfamily\thepage}
    \fancyhead[LO,RE]{\small\scshape Inhaltsverzeichnis}}   
\fancypagestyle{Vorwort}{\fancyhf{}%
    \fancyhead[RO,LE]{\small\rmfamily\thepage}
    \fancyhead[LO,RE]{\small\scshape Vorwort}}
\fancypagestyle{Something}{\fancyhf{}%
    \fancyhead[RO,LE]{\small\rmfamily\thepage}
    \fancyhead[LO,RE]{\small\scshape About Something}}
\fancypagestyle{AlphabetischesVerzeichnis}{\fancyhf{}%
    \fancyhead[RO,LE]{\small\rmfamily\thepage}
    \fancyhead[LO,RE]{\small\scshape Alphabetisches Verzeichnis}}   
\usepackage{titletoc}
\titlecontents{chapter}[2pc]%
{\addvspace{0.5pc}\normalsize\scshape}%
{\contentslabel{2pc}}%
{\contentslabel{2pc}}{, \thecontentspage}%
[]
\titlecontents{section}[2pc]%
{\addvspace{0.1pc}\small\rmfamily}%
{\contentslabel{2pc}}%
{\contentslabel{2pc}}{, \thecontentspage}%
[]
\usepackage[rm,sc,small,center]{titlesec}
\renewcommand{\thechapter}{}
\titleformat{\chapter}[display]%
{\Huge\scshape}%
{}%
{0pt}{\filcenter}%
[]
\renewcommand{\thesection}{\arabic{section}}
\titleformat{\section}[display]%
{\large\scshape}%
{\filcenter\normalsize\textbf{\thesection}}%
{0pt}{\filcenter}%
[]

\begin{document}
\pagenumbering{roman}
\pagestyle{empty}

\ifdefined\HCode
\phantomsection
\addcontentsline{toc}{chapter}{Cover}
\coverimage[natwidth=\paperwidth,natheight=\paperheight]{Cover_Someimage.jpg}
\fi
\clearpage
\normalsize
... Some pages with empty pagestyle ...

\cleartooddpage
\begingroup
\makeatletter
\ifdefined\HCode
\else
\phantomsection
\addcontentsline{toc}{chapter}{Inhaltsverzeichnis}
\let\ps@plain\ps@empty
\pagestyle{Inhaltsverzeichnis}
\tableofcontents
\fi
\clearpage
\endgroup

\cleartooddpage
\chapter*{Vorwort}
\ifdefined\HCode
\else\phantomsection\addcontentsline{toc}{chapter}{Vorwort}
\fi
\pagenumbering{arabic}
\thispagestyle{empty}
\pagestyle{Vorwort}
... Some Foreword ...

\cleartooddpage
\chapter*{About Something}
\ifdefined\HCode
\else\phantomsection\addcontentsline{toc}{chapter}{About Something}
\fi
\thispagestyle{empty}
\pagestyle{Something}
\clearpage
\section{First}\index{First}
... Some first things...
\clearpage
\section{Second}\index{Second}
... Some second things....

\cleartooddpage
\begingroup
\makeatletter
\let\ps@plain\ps@empty
\pagestyle{AlphabetischesVerzeichnis}
\label{AlphabetischesVerzeichnis}
\small
\renewcommand{\indexname}{\Large Alphabetisches Verzeichnis}
\phantomsection\addcontentsline{toc}{chapter}{Alphabetisches Verzeichnis}
\printindex
\clearpage
\endgroup
\end{document}

它会重现错误 3 次。并且还会重现奇数pathnameli1.html1、3、5。

答案1

这似乎是由 引起的titlesec,它插入了虚假的空白章节,从而产生了多余的页面。可以使用此文件修复此问题titlesec-hooks.4ht

% titlesec-hooks.4ht (2022-03-16-14:13), generated from tex4ht-4ht.tex
% Copyright 2022 TeX Users Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.
\immediate\write-1{version 2022-03-16-14:13}

\let\ttl:@makechapterhead\@makechapterhead
\let\ttl:@makeschapterhead\@makeschapterhead
\let\ttl:chapter\chapter
\let\ttl:section\section
\let\ttl:subsection\subsection
\let\ttl:subsubsection\subsubsection
\let\ttl:paragraph\paragraph
\let\ttl:subparagraph\subparagraph
\:AtEndOfPackage{
  \let\chapter\ttl:chapter
  \let\section\ttl:section
  \let\subsection\ttl:subsection
  \let\subsubsection\ttl:subsubsection
  \let\paragraph\ttl:paragraph
  \let\subparagraph\ttl:subparagraph
  \let\@makechapterhead\ttl:@makechapterhead
  \let\@makeschapterhead\ttl:@makeschapterhead
  \def\ttl@format@si#1#2#3#4#5#6#7{}
  \def\ttl@format@ii#1[#2]#3#4#5#6{
    \@ifnextchar[{%
      \ttl@format@iii{#2}%
    }{%
      \ttl@format@iii{#2}[]}
  }
  \def\ttl@format@iii#1[#2]{}
}

\endinput

它取消命令的重新定义\@makeschapterhead,以防止titlesec对其造成的任何影响。

相关内容