【问题标题】:How do I sanitize LaTeX input?如何清理 LaTeX 输入?
【发布时间】:2010-04-13 05:17:51
【问题描述】:

我想接受用户输入(有时这将是大段落)并生成一个 LaTeX 文档。我正在考虑使用几个简单的正则表达式,用\textbackslash 替换\ 的所有实例,用\}\{ 替换{} 的所有实例。

我怀疑这是否足够。我还需要做什么?注意:如果有为此制作的特殊库,我正在使用 python。

为了澄清,我不希望任何东西被解析为 LaTeX 语法:$a$ 应该替换为 \$a\$

【问题讨论】:

  • 由于 TeX 的复杂语义和解析规则,解决方案可能不是用 Python 处理,而是如何将数据转储到 LaTeX。如果您提供有关输入数据可以包含哪些内容的详细信息(应在何种程度上将其作为 LaTeX 处理?---\ae 和数学模式是否有效?),有人可能会给您一个很好的答案。
  • 这个问题与stackoverflow.com/questions/2541616/…基本相同
  • 另一个问题的重点是防止用户做有害的事情(获得 shell 访问权限),而不是确保输入在纯文本输入和文档中看起来相同。

标签: python latex sanitization


【解决方案1】:

如果您的输入是纯文本并且您处于正常的 catcode 制度中,您必须进行以下替换:

  • \\textbackslash{}(注意空组!)
  • {\{
  • }\}
  • $\$
  • &\&
  • #\#
  • ^\textasciicircum{}(需要textcomp 包)
  • _\_
  • ~\textasciitilde{}
  • %\%

此外,至少在使用 OT1 编码时,以下替换是有用的(在任何情况下都是无害的):

  • <\textless{}
  • >\textgreater{}
  • |\textbar{}

这三个禁用大引号:

  • "\textquotedbl{}
  • '\textquotesingle{}
  • `\textasciigrave{}

【讨论】:

  • 空间是否足以代替空组?
  • 另外,Mike Graham 提到的--- 呢?
  • 请注意,\textasciitilde 实际上真的很丑,因为它太高了,这很少是想要的。同样,\texttildelow 太低。我知道的最好的解决方法在这里发布:stackoverflow.com/questions/256457/…
  • @Conley Owens:不,一个空间是不够的,它会被输入处理器吞噬。空组是最简单的解决方案;您还可以检查输入文本中是否有空格并在这种情况下插入控制空格(\ ,反斜杠–空格)。
  • @Conley Owens:--- 是什么意思?破折号在 (pdf)TeX 中实现为连字。如果您不想将“---”转换为“-”,则必须明确替换它(例如,-{}-{}-)。相反的方向是没有问题的:如果您使用支持 Unicode 的引擎(XeTeX、LuaTeX)或使用适当的编码加载 inputenc 包,则可以直接使用 - 或“等印刷字符。
猜你喜欢
  • 2014-08-12
  • 2021-11-24
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 2021-01-26
  • 2020-09-03
  • 2016-04-21
  • 2011-05-20
相关资源
最近更新 更多