Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TeX输入的引号字符串_Python_String_Tex_Quoting - Fatal编程技术网

Python TeX输入的引号字符串

Python TeX输入的引号字符串,python,string,tex,quoting,Python,String,Tex,Quoting,我正在编写一个Python脚本,它将纯文本作为输入并生成 将代码作为输出。在某些时候,脚本必须引用所有 在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.s

我正在编写一个Python脚本,它将纯文本作为输入并生成 将代码作为输出。在某些时候,脚本必须引用所有 在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
def ltx\u报价:
s=re.sub(r'[\\]',r'\\text反斜杠{}',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'\\textgreater{}',s)
返回s

问题在于
{
}
字符,因为它们可能是由较早的替换(
\
->
\textbackslash{}
)产生的,在这种情况下不应被替换。我认为解决办法是一步完成所有替换,但我不知道如何操作。

也许可以尝试使用未记录的:

屈服

\\textbackslash{}foo\\textbackslash{}\\{{}bar\\}{}
与您发布的代码不同,如果您查看的话,re.Scanner.scan只通过字符串一次。一旦进行了一场比赛,下一场比赛将从最后一场比赛结束的地方开始

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

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

如果进行了匹配,则如果操作是可调用的,则调用该操作;如果是字符串,则仅返回该操作。返回值收集在列表
标记中

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