作为期刊编辑,我需要将 bbl 文件中的参考书目翻译成 xml 文件的一部分(以便将来提交交叉引用)。最好使用 pdfLaTeX 即时完成,这样我就可以在 xml 中记录主要元数据(作者、标题、页数、卷等)。目前,我对 bbl 文件使用不涉及\bibitem
括号的方案,例如\bibitem{Smith99} ...
问题是,只要 bbl 文件使用括号(如natbib
),我的方案就会灾难性地失败。\bibitem[blah]{Smith99} ...
问题:如何让 pdfLaTeX\bibitem[]{}
在 pdflatex 排版为 pdf 时将带有这样的 的 bbl 文件解析为 xml 文件?
目前我执行以下操作(从 latex 中的某个地方破解并执行 \AtBeginDocument):
\renewcommand{\bibitem}[1]{</unstructured_citation></citation>
^^J<citation key="#1"><unstructured_citation>}
...
\def\j@@Input{%
\let\jrnltempb\jrnltempa
\immediate\read\jrnlin to\jrnltempa
\ifeof\jrnlin
\immediate\closein\jrnlin
\else
\immediate\write\jrnlout{\jrnltempb}
\expandafter\j@@Input
\fi}
\typeout{**** Starting to write the bibliography to the xml.}
\newread\jrnlin
\immediate\openin\jrnlin\jobname.bbl\relax
\immediate\write\jrnlout{<citation_list>
^^J<citation key="nil"><unstructured_citation>}
\immediate\read\jrnlin to\jrnltempa
\immediate\read\jrnlin to\jrnltempa
\j@@Input
\immediate\write\jrnlout{</unstructured_citation></citation>
^^J</citation_list>}
\immediate\closein\jrnlin
答案1
解析.bbl
文件实际上并不是最佳方法:该文件用于排版,必须来自更结构化的.bib
文件。更明智的方法是修改.bst
BibTeX 使用的文件,使其以.bbl
“注释”的形式将 XML 数据写入。然后可以在适当的条件下轻松读回后者。为了提供更多信息,我们需要一个更完整的示例。