TeXworks 的搜索和替换脚本

TeXworks 的搜索和替换脚本

有没有人有我可以与 TeXworks 一起使用的搜索和替换 lua 脚本的示例。我这里有一个相当大的文档(大约 3'000 页 DIN A5),我需要不断更新。为了更改$\$进行各种其他替换,我想运行一个“全部替换”脚本,该脚本可以在一次运行中完成所有替换。

当需要从 MS Word 或 WWW 等中获取文本时,这可能非常有用。

答案1

你的问题很有趣,我保证会尽快点赞。和往常一样,我的票数已经用完了。

我会尽量写一个谦虚的答案。如果解决方案可能因任何错误或烦恼而造成任何麻烦,我真的很抱歉,我是 Lua 新手。:)

首先,我们需要在 TeXworks 中启用脚本语言插件。我们只需转到选项卡Preferences中的即可完成此操作Scripts

优先

我们只需要勾选复选框即可。:)

现在,让我们看看将脚本放在哪里。转到ScriptsScripting TeXworksShow Scripts Folder

脚本菜单

操作系统文件管理器将出现我们想要的文件夹。:)

脚本文件夹

在我的 Mac 上,它位于~/Library/TeXworks/scripts。现在,创建一个名为的新文件replaceList.lua并添加以下内容,就像它

--[[TeXworksScript
Title: Replace list
Description: A replacement script
Author: Paulo Cereda
Version: 1.0
Date: 2012-11-28
Script-Type: standalone
Context: TeXDocument
]]

-- implements the 'strip' function in order to extract
-- elements from a string according to a specific
-- separator. The output is a table containing each
-- element from the input string.
-- Thanks to the http://lua-users.org/wiki/SplitJoin wiki.
string.split = function(str, pattern)
    pattern = pattern or "[^%s]+"    
    if pattern:len() == 0 then    
        pattern = "[^%s]+"    
    end    
    local parts = {__index = table.insert}   
    setmetatable(parts, parts)    
    str:gsub(pattern, parts)    
    setmetatable(parts, nil)   
    parts.__index = nil   
    return parts
end   

-- gets a string containing a list of patterns. This is
-- the first dialog window that appears in the script
-- execution.
local listOfPatterns = TW.getText(nil, "List of patterns to replace  - 1/2", "Please, add a list of patterns to replace, separated by comma.")

-- gets a string containing a list of words to replace the
-- patterns obtainted in the previous step. This is the
-- second dialog window that appears in the script
-- execution
local listOfReplacements = TW.getText(nil, "List of patterns to replace  - 2/2", "Please, add a list of replacements, separated by comma.")

-- checks if both inputs are valid
if (listOfPatterns ~= nil) and (listOfReplacements) then

    -- split the patterns into elements of a table. In our
    -- case, the separator is a comma.
    local patternsToLook = string.split(listOfPatterns, "[^,%s]+")

    -- split the values into elements of a table. In our case,
    -- the separator is a comma.
    local valuesToReplace = string.split(listOfReplacements, "[^,%s]+")

    -- the number of elements of both tables must be equal
    if (#patternsToLook == #valuesToReplace) then

        -- iterate through the patterns table
        for index, currentValue in ipairs(patternsToLook) do

            -- select all the text from the current
            -- document
            TW.target.selectAll();

            -- get all the selected text
            local text = TW.target.selection

            -- checks if there's actually a text
            if (text ~= nil) then

                -- replace all occurrences of the current
                -- pattern by its corresponding value
                local toReplace, _ = string.gsub(text, currentValue, valuesToReplace[index])

                -- insert modified text into the
                -- document
                TW.target.insertText(toReplace)
            end
        end 
    end
end

我向 Patrick、Taco 和其他 Lua 大师表示诚挚的歉意。:)

现在,我们的文件夹中有一个新文件replaceList.lua

新文件

现在,回到 TeXworks,我们需要重新加载脚本列表。这很简单,我们需要转到ScriptsScripting TeXworksReload Scripts List

重新加载脚本

完成。:)让我们创建一个测试文件:

我的文档

是时候运行我们的脚本了。只需转到Scripts并选择Replace list

运行脚本

现在,TeXworks 脚本 API 的魔力将显现出来。首先,我们将定义要查找的模式列表:

模式列表

我猜是支持正则表达式的。

我告诉我们的脚本寻找三个单词,以逗号分隔。单击后OK,将出现一个新窗口,其中包含替换单词列表:

替换

当然,两个列表必须具有相同的大小。:)单击 后OK,将显示新文本:

新建文档

好了!:)希望我的回答能帮到你。:)

相关内容