动态生成的具有不可预测的 UTF-8 字符串的 .tex 文件

动态生成的具有不可预测的 UTF-8 字符串的 .tex 文件

我正在开发一个使用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 字体。

相关内容