编写从 ASCII-TeX 到 Unicode 重音的转换器并非易事。我见过的大多数转换器都因不遵循宏、嵌套宏或难以维护而失败,因为编写像 TeX 一样简单的东西需要覆盖无数种搜索/替换模式\'\i
。
Biber 似乎在这方面做得很棒。它可以毫无障碍地转换参考书目条目和我见过的例子中的重音字符串。
是否可以利用这个 Biber 例程来制作通用 TeX 文件的完整转换器?
答案1
biber 的这个方面只是做一个简单的字符串替换,它不期望复杂的局部定义,如果您使用\verb
或tabbing
(具有诸如命令的局部定义\=
)或局部定义,那么您会发现它没有考虑任何 tex 结构。
以下文档有一个奇怪的引用,但显示 tex 构造被传递给 biber
\begin{filecontents}{\jobname.bib}
@misc {zzz,
author="Zzzz",
title={\verb|\"{a}| makes \"{a}},
journal={{\renewcommand\"{boo} \" a}},
publisher={
\begin{tabbing}
a \= b
\end{tabbing}
}
}
\end{filecontents}
\documentclass{article}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\begin{tabbing}
a \= b
\end{tabbing}
\cite{zzz}
\printbibliography
\end{document}
文件中生成的相关字段.bbl
是
\list{publisher}{1}{%
{\begin{tabbing} a b̄ \end{tabbing}}%
\field{journaltitle}{{\renewcommand\"{boo} ä}}
\field{title}{\verb|ä| makes ä}
所有这些都无法在 latex 中给出正确的结果,\=
设置选项卡的命令tabbing
已丢失。该\"
命令已按预期在本地重新定义,但其使用已被替换,ä
并且\verb
不会显示使用\"
由于存在局部定义,任何系统都很难完全可靠地用该字符更改与 unicode 字符相对应的所有传统 ascii 标记实例,而不会破坏该字符串的任何“意外”使用。 中的定义tuenc.def
给出了构造的 unicode 定义,但在扩展和执行 tex 文档时会对其进行扩展,因此上下文是已知的,并且您不会尝试保留原始 tex 结构。
对于个人文档,如果您想这样做,使用 sed 或 perl 或 python 等进行简单的字符串替换将转换文档,并且可能需要手动修复一些损坏的边缘情况,但使用一个工具来可靠地转换现有文档集合而不破坏任何一个文档会困难得多。