将书目内容从书目环境写入文件

将书目内容从书目环境写入文件

我需要将thebibliography环境(未使用 BixTeX/BibLaTeX)中的内容写入 XML 文件。每个书目来源都应位于单独的<reference></reference>标签对中。可能需要以某种方式重新定义thebibliography环境和/或\bibitem命令?我将不胜感激您的帮助。

例如:

\documentclass{article}
\begin{document}

% I need to get a test.xml file containing
% <references>
% <reference>Papargyri-Beskou, S., Tsepoura, K., Polyzos, D. \& Beskos D. (2003). Bending and stability analysis of gradient elastic beams. \emph{Int. J. Solids Struct.}, \textbf{40}(2), 385--400. DOI 10.1016/S0020-7683(02)00522-X</reference>
% <reference>Niiranen, J., Balobanov, V., Kiendl, J. \& Hosseini, S. (2017). Variational formulations, model comparisons and numerical methods for Euler--Bernoulli micro-and nano-beam models. \emph{Math. Mech. Solids}, \textbf{24}(1), 312--335. DOI 10.1177/1081286517739669</reference>
% </references>

\begin{thebibliography}{1}
\bibitem{papa}
Papargyri-Beskou, S., Tsepoura, K., Polyzos, D. \& Beskos D. (2003). Bending and stability analysis of gradient elastic beams. \emph{Int. J. Solids Struct.}, \textbf{40}(2), 385--400. DOI 10.1016/S0020-7683(02)00522-X
\bibitem{niir}
Niiranen, J., Balobanov, V., Kiendl, J. \& Hosseini, S. (2017). Variational formulations, model comparisons and numerical methods for Euler--Bernoulli micro-and nano-beam models. \emph{Math. Mech. Solids}, \textbf{24}(1), 312--335. DOI 10.1177/1081286517739669
\end{thebibliography}
\end{document}

答案1

为了使解析更容易一些,您可以先使用 TeXht 将 LaTeX 源代码转换为 HTML。另一个优点是 TeX4ht 已经执行了一些处理来处理 LaTeX 命令。在终端中:

make4ht yourfile.tex

生成的 html 文件片段,显示第一个引用:

<div class='thebibliography'>
   <p class='bibitem'><span class='biblabel'>
 [1]<span class='bibsp'>   </span></span><a id='Xpapa'></a>Papargyri-Beskou, S., Tsepoura, K., Polyzos, D. &amp; Beskos D. (2003).
   Bending  and  stability  analysis  of  gradient  elastic  beams.  <span class='cmti-10'>Int.  J.  Solids
   </span><span class='cmti-10'>Struct.</span>, <span class='cmbx-10'>40</span>(2), 385–400. DOI 10.1016/S0020-7683(02)00522-X
   </p>

您可以使用 XPath 解析此内容以获取数据。下面是一个使用 XPath 解析器的 Bash shell 脚本的示例xmllint,但当然您可以选择任何命令行工具或编程语言中的库来进行解析。

脚步:

  1. 运行 TeX4ht
  2. count()使用XPath查找引用数
  3. 针对每个参考文献提取文本
    • 跳过<span[class='biblabel']>节点,因为它们不是参考文本的一部分
  4. tr使用终端工具删除换行符和双空格sed
  5. 打印每个参考文献和整个区块周围的标签

代码:

make4ht $1
htmlfile=`basename $1 .tex`
numberrefs=`xmllint --xpath "count(//p[@class='bibitem'])" $htmlfile.html`
echo "<references>"
for refnr in $(seq 1 $numberrefs); do
   reftext=`xmllint --xpath "(//p[@class='bibitem'])[$refnr]//text()[not(parent::span[@class='biblabel'])]" $htmlfile.html`
   reftextnb=`echo $reftext|tr '\n' ' '|sed -r -e 's/(\xC2\xA0| ){2,}/ /g'`
   echo "<reference>$reftextnb</reference>"
done
echo "</references>"

使用以下终端命令运行此脚本:

bash myscript.sh mydocument.tex

结果:

<references>
<reference> Papargyri-Beskou, S., Tsepoura, K., Polyzos, D. &amp; Beskos D. (2003). Bending and stability analysis of gradient elastic beams. Int. J. Solids Struct. , 40 (2), 385–400. DOI 10.1016/S0020-7683(02)00522-X </reference>
<reference> Niiranen, J., Balobanov, V., Kiendl, J. &amp; Hosseini, S. (2017). Variational formulations, model comparisons and numerical methods for Euler–Bernoulli micro-and nano-beam models. Math. Mech. Solids , 24 (1), 312–335. DOI 10.1177/1081286517739669 </reference>
</references>

请注意,对于 Mac,Bash 脚本和工具的某些标志和功能可能不同或不可用。

相关内容