如何交换latex代码中的字符串顺序?

例如:

\alpha ...\beta \gamma...+\alpha...\beta\xi...-\epsilon...\beta\alpha...+...

替换为

\beta \gamma...\alpha ...+\beta\xi...-\beta\alpha...\epsilon...+...

最后的...表示具有...\beta...这类结构的字符串,以\beta作为分界,每个因式中的省略号表示其他字符,实际上,我想解决下面的问题,将下面公式


中每项中的 \lambda 及其后面部分替换到每项的前面

我结合后面一位朋友的方法,写了下面的代码:

f1(seq,dlm)= dlm*join(reverse(split(seq,dlm)))

f=open("latex.txt")
g=open("latex_1,txt","a")
for line in eachline(f)
    for i in 2:length(line)
        line1[i-1]=line[i]
    end
    if occursin("\lambda", line1)
        f1(line1,"\lambda")
    else
        break
    end
    line=line[1]*line
    write(g,line) 
end
readline(g)
close(f)
close(g)

其中latex.txt文件内容为:

+u^{\dagger} \partial_{\mu}{u} u^{\dagger} \partial_{\mu}{u}
-u^{\dagger} \partial_{\mu}{u} u^{\dagger}   u
-u^{\dagger} \partial_{\mu}{u} u^{\dagger} \lambda \partial_{\mu}{u}
+u^{\dagger} \partial_{\mu}{u} u^{\dagger} i r_{\mu} u
+u^{\dagger} \partial_{\mu}{u} u^{\dagger} i r_{\mu} \lambda u
+u^{\dagger} \partial_{\mu}{u} u \partial_{\mu}{u^{\dagger}}
-u^{\dagger} \partial_{\mu}{u} u i l_{\mu} u^{\dagger}
+u^{\dagger} \partial_{\mu}{u} \lambda u \partial_{\mu}{u^{\dagger}}
-u^{\dagger} \partial_{\mu}{u} \lambda u i l_{\mu} u^{\dagger}
-u^{\dagger}   u u^{\dagger} \partial_{\mu}{u}
-u^{\dagger} \lambda \partial_{\mu}{u} u^{\dagger} \partial_{\mu}{u}
+u^{\dagger}   u u^{\dagger} i r_{\mu} u
+u^{\dagger} \lambda \partial_{\mu}{u} u^{\dagger} i r_{\mu} u
+u^{\dagger}   u u \partial_{\mu}{u^{\dagger}}
+u^{\dagger} \lambda \partial_{\mu}{u} u \partial_{\mu}{u^{\dagger}}
-u^{\dagger}   u u i l_{\mu} u^{\dagger}
-u^{\dagger} \lambda \partial_{\mu}{u} u i l_{\mu} u^{\dagger}
+u^{\dagger} i r_{\mu} u u^{\dagger} \partial_{\mu}{u}
+u^{\dagger} i r_{\mu} u u^{\dagger}   u
+u^{\dagger} i r_{\mu} u u^{\dagger} \lambda \partial_{\mu}{u}
+u^{\dagger} r_{\mu} u u^{\dagger} r_{\mu} u
+u^{\dagger} r_{\mu} u u^{\dagger} r_{\mu} \lambda u
-u^{\dagger} i r_{\mu} u u \partial_{\mu}{u^{\dagger}}
-u^{\dagger} r_{\mu} u u l_{\mu} u^{\dagger}
-u^{\dagger} i r_{\mu} u \lambda u \partial_{\mu}{u^{\dagger}}
-u^{\dagger} r_{\mu} u \lambda u l_{\mu} u^{\dagger}
+u^{\dagger} i r_{\mu} \lambda u u^{\dagger} \partial_{\mu}{u}
+u^{\dagger} r_{\mu} \lambda u u^{\dagger} r_{\mu} u
-u^{\dagger} i r_{\mu} \lambda u u \partial_{\mu}{u^{\dagger}}
-u^{\dagger} r_{\mu} \lambda u u l_{\mu} u^{\dagger}
+u \partial_{\mu}{u^{\dagger}} u^{\dagger} \partial_{\mu}{u}
+u \partial_{\mu}{u^{\dagger}} u^{\dagger}   u
+u \partial_{\mu}{u^{\dagger}} u^{\dagger} \lambda \partial_{\mu}{u}
-u \partial_{\mu}{u^{\dagger}} u^{\dagger} i r_{\mu} u
-u \partial_{\mu}{u^{\dagger}} u^{\dagger} i r_{\mu} \lambda u
-u \partial_{\mu}{u^{\dagger}} u \partial_{\mu}{u^{\dagger}}
+u \partial_{\mu}{u^{\dagger}} u i l_{\mu} u^{\dagger}
-u \partial_{\mu}{u^{\dagger}} \lambda u \partial_{\mu}{u^{\dagger}}
+u \partial_{\mu}{u^{\dagger}} \lambda u i l_{\mu} u^{\dagger}
-u i l_{\mu} u^{\dagger} u^{\dagger} \partial_{\mu}{u}
-u i l_{\mu} u^{\dagger} u^{\dagger}   u
-u i l_{\mu} u^{\dagger} u^{\dagger} \lambda \partial_{\mu}{u}
-u l_{\mu} u^{\dagger} u^{\dagger} r_{\mu} u
-u l_{\mu} u^{\dagger} u^{\dagger} r_{\mu} \lambda u
+u i l_{\mu} u^{\dagger} u \partial_{\mu}{u^{\dagger}}
+u l_{\mu} u^{\dagger} u l_{\mu} u^{\dagger}
+u i l_{\mu} u^{\dagger} \lambda u \partial_{\mu}{u^{\dagger}}
+u l_{\mu} u^{\dagger} \lambda u l_{\mu} u^{\dagger}
+\lambda u \partial_{\mu}{u^{\dagger}} u^{\dagger} \partial_{\mu}{u}
- u \partial_{\mu}{u^{\dagger}} u^{\dagger} i r_{\mu} u \lambda
- u \partial_{\mu}{u^{\dagger}} \lambda u \partial_{\mu}{u^{\dagger}}
+ u \partial_{\mu}{u^{\dagger}} u i l_{\mu} u^{\dagger} \lambda
- u i l_{\mu} u^{\dagger} u^{\dagger} \partial_{\mu}{u}
-\lambda u l_{\mu} u^{\dagger} u^{\dagger} r_{\mu} u\lambda
+\lambda u i l_{\mu} u^{\dagger} u \partial_{\mu}{u^{\dagger}}
+ u l_{\mu} u^{\dagger} \lambda u l_{\mu} u^{\dagger}
+u^{\dagger} \partial_{\mu}{u} u^{\dagger} \partial_{\mu}{u}
-u^{\dagger} \partial_{\mu}{u} u^{\dagger} i r_{\mu} u
-u^{\dagger} \partial_{\mu}{u} u \partial_{\mu}{u^{\dagger}}
+u^{\dagger} \partial_{\mu}{u} u i l_{\mu} u^{\dagger}
-u^{\dagger} i r_{\mu} u u^{\dagger} \partial_{\mu}{u}
-u^{\dagger} r_{\mu} u u^{\dagger} r_{\mu} u
+u^{\dagger} i r_{\mu} u u \partial_{\mu}{u^{\dagger}}
+u^{\dagger} r_{\mu} u u l_{\mu} u^{\dagger}
-u \partial_{\mu}{u^{\dagger}} u^{\dagger} \partial_{\mu}{u}
+u \partial_{\mu}{u^{\dagger}} u^{\dagger} i r_{\mu} u
+u \partial_{\mu}{u^{\dagger}} u \partial_{\mu}{u^{\dagger}}
-u \partial_{\mu}{u^{\dagger}} u i l_{\mu} u^{\dagger}
+u i l_{\mu} u^{\dagger} u^{\dagger} \partial_{\mu}{u}
+u l_{\mu} u^{\dagger} u^{\dagger} r_{\mu} u
-u i l_{\mu} u^{\dagger} u \partial_{\mu}{u^{\dagger}}
-u l_{\mu} u^{\dagger} u l_{\mu} u^{\dagger}
+u^{\dagger} \chi u^{\dagger}
+u \chi^{\dagger} u
+u \chi^{\dagger} \lambda u
+\lambda u \chi^{\dagger} u
-u^{\dagger} \chi u^{\dagger}
-u \chi^{\dagger} u

运行出错,报错信息为:

syntax: invalid escape sequence

请问代码哪里有问题?


我根据Jun建议,对代码进行了修改:

f1(seq,dlm)= dlm*join(reverse(split(seq,dlm)))
f=open("latex.txt")
g=open("latex_1,txt","a")
for line in eachline(f)
    for i in 2:length(line)
        line1[i-1]=line[i]  #这里存在问题,line1还未定义
    end
    if occursin(raw"\lambda", line1) #已修改
        f1(line1,raw"\lambda")  #已修改
    else
        break
    end
    line=line[1]*line1
    write(g,line) 
end
readline(g)
close(f)
close(g)

还是有错,报错信息为:

UndefVarError: line1 not defined

Stacktrace:
 [1] top-level scope at .\In[1]:clock6:

现在的问题变为了:如何定义任意长度的字符串?

julia> seq1="α…βγ…"
julia> seq2="\\alpha \\beta \\gamma"
julia> f1(seq,dlm)= dlm*join(reverse(split(seq,dlm)))
f1 (generic function with 1 method)

julia> f2(seq,dlm)=dlm*join(reverse(split(seq,dlm)),' ')
f2 (generic function with 1 method)

julia> f1(seq1,"β")
"βγ…α…"

julia> f2(seq2,"\\beta")
"\\beta \\gamma \\alpha "

假设每一因式都由$\beta$分为两部分,把$\beta$放到前面,然后把剩下的两部分位置互换,拼接到的就是所要的效果?预格式化文本

首先要将每个因式提取出来,再进行你上面的操作,最后合并到一块,不太明白应该怎么弄,比如:

\apha \beta\gamma+\apha\beta\xi+...

后面的项都具有...\beta...这种结构,同样还是以\beta作为分界.

我重新修改了问题,你再看看

如群里所说,两次替换下就可以了,对于有括号的结构可能需要再修改下。

julia> s = "aXb + bXc + Xyz +mX"
"aXb + bXc + Xyz +mX"

julia> replace(s, r"\w+" => x -> replace(x, r"(?<op1>\w*)X(?<op2>\w*)" => s"\g<op2>X\g<op1>"))
"bXa + cXb + yzX +Xm"

emm 多个字符似乎有点问题,不过大致是这个思路