编写Pandoc的Lua过滤器:io.stderr.write换行替代方案咨询
Pandoc Lua过滤器换行符问题解决方案
你用[[ ]]定义仅包含换行的字符串变量失效,是因为Lua的长字符串字面量在这种场景下不可靠,推荐以下两种替代方案:
方案1:直接使用转义字符(简单通用)
直接用'\n'定义换行符,这是Lua中最直接的方式,适用于大多数类Unix环境,代码修改如下:
local pagetitle function Header(header) if not pagetitle and header.level == 1 then pagetitle = pandoc.utils.stringify(header) end end -- 用转义字符定义换行符 local EOL = '\n' function Meta(meta) if not meta.pagetitle then if pagetitle then meta.pagetitle = pagetitle else io.stderr:write( 'WARNING: h1 missing, defaulting HTML pagetitle to input filename.', EOL) meta.pagetitle = PANDOC_STATE.input_files[1] end return meta end end
方案2:跨平台自动适配(兼容Windows/Unix)
如果需要过滤器在不同操作系统下都输出对应标准换行符,可以利用package.config获取系统原生换行符:
local pagetitle function Header(header) if not pagetitle and header.level == 1 then pagetitle = pandoc.utils.stringify(header) end end -- 跨平台获取系统换行符 local EOL = package.config:sub(3,3) function Meta(meta) if not meta.pagetitle then if pagetitle then meta.pagetitle = pagetitle else io.stderr:write( 'WARNING: h1 missing, defaulting HTML pagetitle to input filename.', EOL) meta.pagetitle = PANDOC_STATE.input_files[1] end return meta end end
说明
Lua的长字符串[[ ]]如果仅包含换行,容易因解析逻辑或代码缩进问题被处理为空字符串,而转义字符或package.config的方式更稳定可靠。
内容的提问来源于stack exchange,提问作者Wolf
相关产品推荐
相关产品推荐

