ConTeXt:字符串操作

ConTeXt:字符串操作

字符串操作wiki 页面上有一个编译失败的示例。这段代码前后必须添加一些语法,但我在文档中找不到有关此内容的任何详细信息。代码片段如下:

\starttext
    str = "Luxury Yacht"

    rep = {
        [1] = { "Luxury", "Throatwobbler"   },
        [2] = { "Yacht",  "Mangrove"        },
    }

    print("My name is spelled “" .. str .. "”, but it's pronounced “" .. lpeg.replacer(rep):match(str) .. "”.")

\stoptext
  • 如何在我的文档中使用此功能?
  • 我可以将文档中的所有文本放入其中print()以对所有文本进行一些更改吗?例如,将文档中的所有“apple”替换为“fruit”?

我特别感兴趣的是使用lpeg.replacer(表格)特征。

答案1

这里有两点错误。首先,您需要“转为 Lua”,这可以使用\directlua原语来完成,但有“更高级别”的包装器:\ctxlua{...}或。其次,您需要将输出“打印”到 TeX,这可以使用或\startluacode ... \stopluacode来完成;后者也调用,因此您可以使用 printf 样式的参数。tex.print(...)context(...)string.format

\starttext
  \startluacode
    local str = "Luxury Yacht"

    local rep = {
        [1] = { "Luxury", "Throatwobbler"   },
        [2] = { "Yacht",  "Mangrove"        },
    }
    context("My name is spelled “%s”, but it's pronounced “%s”.", str, lpeg.replacer(rep):match(str))
  \stopluacode

\stoptext

答案2

\starttext
  \def\LuaTest#1#2{\directlua{
    str = "#1 #2"
    rep = {
        [1] = { "Luxury", "Throatwobbler"   },
        [2] = { "Yacht",  "Mangrove"        },
    }
    tex.print("My name is spelled “" .. str .. "”, but it's pronounced “" .. lpeg.replacer(rep):match(str) .. "”.")}}

\LuaTest{Luxury}{Yacht}
\stoptext

相关内容