gpt4 book ai didi

python - TeX 输入的引号字符串

转载 作者:行者123 更新时间:2023-11-28 16:44:53 24 4
gpt4 key购买 nike

我正在编写一个 Python 脚本,它将纯文本作为输入并生成LaTeX 代码作为输出。在某些时候,脚本必须引用所有在 TeX 中有特殊含义的字符,如 %&\ 等上。

这比我想象的要难。目前我有这个:

def ltx_quote(s):
s = re.sub(r'[\\]', r'\\textbackslash{}', s)
# s = re.sub(r'[{]', r'\\{{}', s)
# s = re.sub(r'[}]', r'\\}{}', s)
s = re.sub(r'[&]', r'\\&{}', s)
s = re.sub(r'[$]', r'\\${}', s)
s = re.sub(r'[%]', r'\\%{}', s)
s = re.sub(r'[_]', r'\\_{}', s)
s = re.sub(r'[\^]', r'\\^{}', s)
s = re.sub(r'[~]', r'\\~{}', s)
s = re.sub(r'[|]', r'\\textbar{}', s)
s = re.sub(r'[#]', r'\\#{}', s)
s = re.sub(r'[<]', r'\\textless{}', s)
s = re.sub(r'[>]', r'\\textgreater{}', s)
return s

问题是 {} 字符,因为它们可能是由较早的替换产生的 (\ -> \textbackslash{}) 在这种情况下不应被替换。我认为解决方案是一步完成所有替换,但我不知道该怎么做。

最佳答案

也许尝试使用未记录的 re.Scanner :

import re
scanner = re.Scanner([
(r"[\\]", r'\\textbackslash{}'),
(r"[{]", r'\\{{}'),
(r"[}]", r'\\}{}'),
(r".", lambda s, t: t)
])

tokens, remainder = scanner.scan("\\foo\\{bar}")
print(''.join(tokens))

产量

\\textbackslash{}foo\\textbackslash{}\\{{}bar\\}{}

与您发布的代码不同,如果您查看 the source code , re.Scanner.scan 仅通过字符串一次。一旦进行了一场比赛,下一场比赛将从上一场比赛结束的地方开始。

re.Scanner 的第一个参数是一个词典——一个二元组列表。每个 2 元组都是一个正则表达式模式和一个 Action 。操作可以是字符串、可调用(函数)或 None(无操作)。

这些模式都被编译成一个复合模式。因此,模式在词典中的排列顺序很重要。第一个匹配的模式获胜。

如果进行了匹配,如果它是可调用的,则调用该操作,或者如果是一个字符串,则简单地返回。返回值收集在 tokens 列表中。

关于python - TeX 输入的引号字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com