Update:从 0.20 版本开始,pybtex 现在支持此功能。
目前还没有。但是您可以在使用 pybtex 处理之前使用 Latex 编解码器读取 bib 文件,例如和https://pypi.python.org/pypi/latexcodec/ https://pypi.python.org/pypi/latexcodec/该编解码器将为您将(多种)LaTeX 命令转换为 unicode。
但是,您必须在后处理阶段删除括号。为什么?为了优雅地处理 bibtex 代码,\"{U}
has被转换成{Ü}
而不是进入Ü
以防止标题中出现小写。以下示例演示了此行为:
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 能够以某种方式为您做到这一点,那就太好了,但目前还不行。