我正在开发一个使用pdflatex
动态生成的.tex
文件输出 pdf 报告的应用程序。
在这个.tex
文件中,我嵌入了来自数据库的 UTF-8 字符串,它可以包含任何可能的 UTF-8 字符,因为这些字符来自对某些图像和其他 pdf 进行 OCR。
为了避免这些字符串被误认为是问题字符串,并且保证它们的安全,我现在正在做的就是用下面的 ruby 代码替换一些我发现有问题的字符:
def latex_escape
replacements = {
"\\" => "$\\backslash$",
"^" => "\\\\^",
"$" => "\\\\$ ",
"%" => "\\%",
"&" => "\\\\&",
"_" => "\\\\_",
"~" => "*~*",
"#" => "\\\\#",
"{" => "$\\\\{$",
"}" => "$\\\\}$",
" - " => " --- ",
" :" => '\\@:',
/"([^"]+)"/ => '`\1\'',
"..." => "\\ldots",
"°" => '${^\\circ}$',
/[\r\n]+/ => "\n\n"
}
new_str = self.dup
replacements.each { |k,v| new_str.gsub!(k,v) }
new_str
end
这是可行的,但并未涵盖所有可能的情况。
.tex
正在生成带有标题的文件\usepackage[utf8x]{inputenc}
。
.tex
除了手动映射和替换所有可能有问题的字符之外,有没有更简单的方法可以确保这些字符串对于文件嵌入是安全的?
答案1
如果您想在 LaTeX 中使用任意 Unicode 字符,我强烈建议使用具有“适当”Unicode 支持的引擎之一,即 LuaTeX 或 XeTeX。这不仅可以更轻松地处理不常见的字符,而且您还可以选择包含所需 Unicode 字符的 OpenType 字体。