2

やや奇妙な問題にぶつかった...文字列を変えたい:

a\左(b_{d}\右)

の中へ

a \left( b_{d} \right)

Luaスクリプトを使用してSciteで。

そこで、Scite 用の次の Lua スクリプトを作成しました。


function SpaceTexEquations()
  editor:BeginUndoAction()
    local sel = editor:GetSelText()

    local cln3 = string.gsub(sel, "\\left(", " \\left( ")
    local cln4 = string.gsub(cln3, "\\right)", " \\right) ")

    editor:ReplaceSel(cln4)
  editor:EndUndoAction()
end

cln3 行は正常に動作しますが、cln4 は次のようにクラッシュします。

 /home/user/sciteLuaFunctions.lua:49: invalid pattern capture
 >Lua: error occurred while processing command

これは、括弧文字 () が Lua の予約文字であるためだと思います。しかし、なぜ cln3 行はエスケープせずに機能するのでしょうか? ちなみに私も試しました:

-- using backslash \ as escape char:
local cln4 = string.gsub(cln3, "\\right\)", " \\right) ") -- crashes all the same

-- using percentage sign % as escape chare
local cln4 = string.gsub(cln3, "\\right%)", " \\right) ") -- does not crash, but does not match either

これを行う正しい方法は何ですか?

ありがとう、

乾杯!

4

1 に答える 1

5

Lua の正しいエスケープ文字は % です。

local sel = [[a\left(b_{d}\right)]]
local cln3 = string.gsub(sel, "\\left%(", " \\left( ")
local cln4 = string.gsub(cln3, "\\right%)", " \\right) ")
print (cln4)

そして得た

a \left( b_{d} \right) 

だから、私が試したとき、これは私にとってうまくいきました。

于 2010-03-25T19:50:08.823 に答える