我有一份充满编辑评论的文档,如下所示:
\starttext
This [is ]some text with
comment[s] added to show
corrections to erro[r]s.
\stoptext
我需要将注释加粗,以便更显眼。结果将与此相同:
\starttext
This {\bf [is ]}some text with
comment{\bf [s]} added to show
corrections to erro{\bf [r]}s.
\stoptext
有没有什么方法可以教会 ConTeXt 以这种格式和方括号格式化方括号中出现的所有文本,而无需手动{\bf *}
向文本添加语法?
答案1
如果注释太短,无法跨越多行,则可以使用输入处理程序:
\startluacode
local lpeg = require "lpeg"
local lpegmatch = lpeg.match
local Cs, P, V = lpeg.Cs, lpeg.P, lpeg.V
local lbrak = P "["
local rbrak = P "]"
local inner = P { lbrak * (V (1) + (1 - rbrak))^1 * rbrak }
local outer = (lbrak / [[{\bf[]])
* (inner + (1 - rbrak))^1
* (rbrak / "]}")
local p_rewrite = Cs ((outer + 1)^0)
resolvers.installinputlinehandler (function (line)
return lpegmatch (p_rewrite, line)
end)
\stopluacode
\starttext
This [is ]some [[text] with]
comment[s] added to show
corrections to erro[r]s.
\blank [3*line] %% <= fail
Unmatching [[[brackets are
unaffected]. [Nesting [is]]
fine, though.
\stoptext
示例代码通过 LPEG 替换模式重写输入行。允许在突出显示区域嵌套内嵌套匹配的括号对,不匹配的左括号将被忽略。
不过,有一个问题:在 TeX 有机会处理宏之前,替换就已应用。由于在 Context 中方括号通常用于界定宏参数,因此如果文件包含其他标记,则可能会产生很多干扰。如果是这种情况,您可能需要切换到不同的分隔符对,例如“<”、“>”。