我需要将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. & 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
,但当然您可以选择任何命令行工具或编程语言中的库来进行解析。
脚步:
- 运行 TeX4ht
count()
使用XPath查找引用数- 针对每个参考文献提取文本
- 跳过
<span[class='biblabel']>
节点,因为它们不是参考文本的一部分
- 跳过
tr
使用终端工具删除换行符和双空格sed
- 打印每个参考文献和整个区块周围的标签
代码:
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. & 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. & 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 脚本和工具的某些标志和功能可能不同或不可用。