from pybtex.database.input import bibtex
parser = bibtex.Parser()
bibdata = parser.parse_file("sample.bib")
上面的代码片段在解析.bib文件方面效果很好但似乎不支持重音字符,例如{\"u}
或\"{u}
(来自LaTeX)。就像确认pybtex是否支持一样。
例如,根据LaTeX/Special Characters和How to write “ä” and other umlauts and accented letters in bibliography?,\"{o}
应该转换为ö
,{\"o}
也是如此。
答案 0 :(得分:3)
更新:自0.20版以来,pybtex现在支持此功能。
目前还没有。但是在使用pybtex进行处理之前,您可以使用乳胶编解码器读取bib文件,例如with https://pypi.python.org/pypi/latexcodec/此编解码器会将(各种)LaTeX命令转换为unicode。
但是,您必须在后处理阶段删除括号。为什么?为了优雅地处理bibtex代码,\"{U}
将转换为{Ü}
而不是转换为Ü
,以防止它在标题中被降低。以下示例演示了此行为:
import pybtex.database.input.bibtex
import pybtex.plugin
import codecs
import latexcodec
style = pybtex.plugin.find_plugin('pybtex.style.formatting', 'plain')()
backend = pybtex.plugin.find_plugin('pybtex.backends', 'latex')()
parser = pybtex.database.input.bibtex.Parser()
with codecs.open("test.bib", encoding="latex") as stream:
# this shows what the latexcodec does to the source
print stream.read()
with codecs.open("test.bib", encoding="latex") as stream:
data = parser.parse_stream(stream)
for entry in style.format_entries(data.entries.itervalues()):
print entry.text.render(backend)
test.bib是
@Article{test,
author = {John Doe},
title = {Testing \"UTEST \"{U}TEST},
journal = {Journal of Test},
year = {2000},
}
这将打印latexcodec如何将test.bib转换为unicode(为便于阅读而编辑):
@Article{test,
author = {John Doe}, title = {Testing ÜTEST {Ü}TEST},
journal = {Journal of Test}, year = {2000},
}
后跟pybtex渲染条目(在本例中,生成乳胶代码):
John Doe.
\newblock Testing ütest {Ü}test.
\newblock \emph{Journal of Test}, 2000.
如果编解码器要删除括号,pybtex会错误地转换该情况。此外,在(病理)案例中,journal = {\"u}
显然也无法删除括号。
一个明显的缺点是,如果渲染到非LaTeX后端,则必须在后处理阶段删除括号。但是你可能想要这样做来处理任何特殊的LaTeX命令(例如\url
)。如果pybtex能以某种方式为你做这件事会很好,但目前还没有。
答案 1 :(得分:0)
pylatexenc(https://pypi.org/project/pylatexenc/)
from pylatexenc.latex2text import LatexNodes2Text
latex_text = 'Gl{\\"o}ckner'
text = LatexNodes2Text().latex_to_text(latex_text)
print(text) # Glöckner