使用 defernumbers 时 biblatex 与 tex4ht 不兼容

使用 defernumbers 时 biblatex 与 tex4ht 不兼容

似乎有一个已知不兼容性使用 时,在biblatex和之间。我有一个大文件。我想在文档中将参考资料分组到不同的类别中。当使用数字标签时,这需要获得连续的编号。tex4htdefernumbers=true.bibdefernumbers=true

一切工作正常,除了htlatex此选项因以下错误而阻塞:

! LaTeX Error: Missing \begin{document} in `'.

强制继续运行以下示例,我获得了一个可用的 .html,但span在开头有一个错误的标签:

<span 
class="cmr-10">01 12</span>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
  "http://www.w3.org/TR/html4/loose.dtd">  

此示例说明了该问题:

\documentclass{article} 
\usepackage{filecontents} 

\begin{filecontents}{sample.bib} 
@article{Smith42,
    AUTHOR = {Smith}, 
    TITLE = {Some Title}, 
    JOURNAL = {Some Journal},
    YEAR = {1942},
}
@article{Aronson12,
    AUTHOR = {Aronson}, 
    TITLE = {Some Title}, 
    JOURNAL = {Some Journal},
    YEAR = {1912},
}
\end{filecontents}

\usepackage[style=numeric,defernumbers=true]{biblatex} 
% The following instead of the previous line works with tex4ht, but the numbering is not as desired.
%\usepackage[style=numeric]{biblatex} 

\bibliography{sample.bib} 

\DeclareBibliographyCategory{group1}
\DeclareBibliographyCategory{group2}
\addtocategory{group1}{Smith42}
\addtocategory{group2}{Aronson12,Smith42}

\begin{document} 
\nocite{*}
\printbibliography[category=group1]
\printbibliography[category=group2]
\end{document}

请注意,如果没有选项,则不会发生此问题defernumbers=true。我使用的是最新版 TL 2011 发行版,即biblatex.sty2011/11/13 19:09:07 和biblatex.4ht2011-09-18-16:07 的 1.7 版。

有没有一种不需要编辑文件的解决方法.bib

答案1

我不确定这是否能帮助解决上述问题 - 但我会尝试记下我的调试步骤。我使用自定义书目排序biblatex,然后需要biber- 并且,PDF 中一切正常 - 当我想使用htlatexbiber、构建它时htlatex- 我得到了上述错误(仅当.aux文件存在时)。

因此我首先得到的是类似这样的信息:

! LaTeX Error: Missing \begin{document} in `'.
See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...
l.29 ...backref{1}{myfirstcite}{0}{4}{4}

grep通过文件搜索找到了这个...... backref{1}{myfirstcite}- 结果发现它在.aux文件中;该行周围的内容如下:

...
\select@language{american}
\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\select@language{american}}
\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\select@language{american}}
\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\select@language{american}}
\abx@aux@backref{1}{myfirstcite}{0}{4}{4}
\abx@aux@page{1}{4}
...

所以我回去,htlatex再次运行 - 现在当它因错误而停止时,我I在 shell 中按下“ ”进行插入,然后只需输入\showENTER可能ENTER两次) - 这会吐出一条额外的错误消息:

?
! Extra }, or forgotten \endgroup.
\abx@aux@backref ...{#2}}{#4}}\blx@addpagesum {#1}
                                                  {#5}
l.29 ...backref{1}{myfirstcite}{0}{4}{4}

好的,现在我很确定tex4ht不喜欢\abx@aux@backref

因此,我首先搜索宏\abx@aux@page- 结果发现它存在于biblatex.4ht文件中(来自tex4ht);片段如下:

%biblatex.4ht
%
% ...
  \def\abx@aux@page#1#2{\blx@addpagesum{#1}{#2}}%
  \def\abx@aux@fnpage#1#2{\blx@addpagesum{#1}{#2}}}
% ...

...但它也出现在biblatex.sty(来自biblatex)中。

然后我搜索\abx@aux@backref- 并且,正如怀疑的那样 - 这个是在中定义的biblatex.sty,但是不是biblatex.4ht这可能是它崩溃的原因。

现在,\abx@aux@backref包含一个@,这意味着我必须在\makeatletter/之间定义它 - 在和都加载\makeatother之后的前言部分。然而,在类似情况下,我经常这样做- 但是,这在这里不起作用,因为原始命令总是有五个参数。biblatextex4ht\let\abx@aux@backref\relax

因此,经过另一次搜索后biblatex.sty,我发现:“ \protected\def\blx@aux@backref#1#2#3#4#5{...”——尽管这不是同一个命令,但肯定与某些东西相关@aux@backref……所以,最后我把它放在了我的序言中:

\makeatletter
\def\abx@aux@backref#1#2#3#4#5{}
\makeatother

...现在htlatex,,biber组合htlatex对我来说似乎可以通过了?!

 

好吧,我不确定我对这一切的看法有多正确 - 但肯定希望它能有所帮助,
干杯!

答案2

相关内容