python - pybtex 是否支持 .bib 文件中的重音/特殊字符?

标签 python latex bibtex

from pybtex.database.input import bibtex
parser = bibtex.Parser()
bibdata = parser.parse_file("sample.bib")

上面的代码片段在解析 .bib 文件时效果很好,但它似乎不支持重音字符,如 {\"u}\"{u}(来自 latex )。只是想确认 pybtex 是否支持。

例如,根据LaTeX/Special CharactersHow to write “ä” and other umlauts and accented letters in bibliography? , \"{o} 应该转换为 ö{\"o} 也是如此。

最佳答案

更新:从 0.20 版本开始,pybtex 现在支持此功能。

暂时没有。但是您可以在使用 pybtex 处理它之前使用 latex 编解码器读取 bib 文件,例如与 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 呈现的条目(在本例中,生成 latex 代码):

John Doe.
\newblock Testing ütest {Ü}test.
\newblock \emph{Journal of Test}, 2000.

如果编解码器要去掉括号,pybtex 会错误地转换大小写。此外,在像 journal = {\"u} 这样的(病态)情况下,显然也不能删除括号。

一个明显的缺点是,如果您渲染到非 LaTeX 后端,那么您必须在后处理阶段移除括号。但是您可能无论如何都想这样做以处理任何特殊的 LaTeX 命令(例如 \url)。如果 pybtex 能以某种方式为您做到这一点,那就太好了,但目前还没有。

关于python - pybtex 是否支持 .bib 文件中的重音/特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751402/

相关文章:

python - keras model.fit() 提供了 tf.Dataset 对象的可初始化迭代器

python - 奇怪的重定向位置导致 urllib2 出现代理错误

R to LaTeX - 使用 xtable 生成带换行的长表

r - 是否可以为代码块生成的表(而不是图形)设置Fig.sap?

bibtex - 如何从 bibtex 数据在 Jabref 中创建多个条目?

r - 修改 `citation`中的 `R`对象

python - 使用函数替换空值

python - 我如何在 odoo 的 xml 中获取当前日期?

latex - papaja 生成的 Rmarkdown 中使用 ragged2e 进行文本对齐

bibtex - 保留 BibTeX 中的所有大写