You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 20:33:20