有谁知道任何实用程序或有将 BibTeX 文件中的特殊字符转换为 bash 脚本中正确的 unicode 等效字符的经验吗?问题是我什至无法在任何地方找到 BibTeX 特殊字符的完整列表。我创建了一个正则表达式的怪物,但我仍然遇到转义问题,因为 BibTeX 特殊字符(即反斜杠、引号和大括号)的特殊方式与正则表达式或 shell 代码不太兼容...
我在想也许拥有一个带有捕获组的简单正则表达式就足够了,该捕获组{\ }
在 BibTeX 标记中查找模式,如果存在匹配,{\\'{o}}
则可以使用某种外部字典来匹配该内容(例如)我创建的文件,将该序列映射到其正确的 unicode 字符......ó
在本例中。如果无法访问特殊字符的完整列表,则很难做到这一点。它们在研究论文元数据(我正在处理的数据)中往往非常常见。
另外一个问题是不同的 BibTex 文件对于特殊字符会有不同的语法 - 名称Müller
可能被编码为author = {M{\"{u}}ller}
, author = {M{\"{\u}}ller}
(内部大括号中额外的反斜杠),甚至author = {M\"{u}ller}
(特殊字符 TeX 片段周围没有大括号)。
我有一个交互式 shell 脚本,可以让我处理我下载的研究论文、查看/跳过/忘记它们,或者输入它们的 DOI,此时 shell 脚本会根据我使用的约定检索论文的 BibTeX、重命名文件,使用 BibTex 标签数据和 DOI,然后在我完成会话后,它会将所有已处理的文件导入 Zotero,然后运行我编写的另一个脚本,为每篇已处理的论文添加 PDF 附件和 Dropbox 链接。但这些特殊字符正在破坏我的文件名和 Zotero 元数据......
长话短说- 有谁知道如何在 bash 脚本的上下文中将 BibTeX/TeX 特殊字符转换为 unicode?或者有谁知道在哪里可以找到 BibTeX 特殊字符的完整列表?
答案1
我认为 Python 比 Bash 更适合处理字符串和 Unicode。您可以在 Bash 中轻松使用它,并且使用这个简单的模板,您不需要了解 Python:
#!/usr/bin/env python3
import sys
for line in sys.stdin:
line = line.replace(r"\'{o}",r"ó")
line = line.replace(r'{\"{u}}',r"ü")
line = line.replace(r'{\"{\u}}',r"ü")
line = line.replace(r'\"{u}',r"ü")
print(line, end='')
用法:
- 将上述内容复制粘贴到新的文本文件中,例如
convert_tex_chars.py
- 打开终端并
cd
进入文本文件所在的目录 - 使文件可执行:
chmod +x convert_tex_chars.py
- 测试:(
echo "s\'{o}ng p\'{o}ng "'M{\"{u}}ller M{\"{\u}}ller M\"{u}ller' |./convert_tex_chars.py
这应该显示sóng póng Müller Müller Müller
) - 在您的 BibTeX 文件上测试它:
cat original_bibtex_file |./convert_tex_chars.py >new_bibtex_file
编辑 Python 文件并根据需要添加或编辑替换内容。请注意,在 Python 中,"
和 的'
工作方式相同,因此""
如果内容包含单引号则使用,''
如果内容包含双引号则使用。请注意,r
每个字符串之前允许您包含反斜杠字符而不转义它(更多细节)。
如果您想要正则表达式替换,请import re
作为第二行插入,然后像这样使用它:(line = re.sub(r'\\', r'\\', line)
这替换\\
为\
)。第一个参数是你的正则表达式,第二个参数是替换(反斜杠是此处处理),第三个是源字符串。请参阅官方文档和网络上有数百个示例。