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

Quarto渲染PDF前用Lua过滤器移除指定minipage环境失败求助

解决Quarto标注框内超长列表无法分页的Lua过滤器问题

问题背景

用Quarto生成PDF时,标注框(callout box)内的超长枚举列表无法自动分页,导致部分内容超出页面可见区域。手动删除标注框正文部分的minipage环境(即\begin{minipage}[t]{\textwidth - 5.5mm}和对应的\end{minipage})后,分页恢复正常,但编写的Lua过滤器未能生效,无法定位并移除目标代码。

原脚本问题排查

原脚本失效的核心原因有两点:

  • 正则匹配不严谨:原正则未考虑LaTeX代码中可能存在的空格变化(比如\textwidth - 5.5mm可能被生成为\textwidth - 5.5mm或\textwidth-5.5mm),导致无法匹配到目标minipage标签。
  • 冗余逻辑干扰:脚本中in_calloutlonglist变量未实际发挥作用,且手动构建processed_content的过程可能遗漏部分子元素的遍历。

修正后的Lua过滤器

function Div(el)
  if el.classes:includes("calloutlonglist") then
    el.content = el.content:walk({
      RawBlock = function(raw)
        if raw.format == 'latex' then
          -- 匹配正文minipage开始标签,兼容空格变化
          local start_pattern = "\\begin{minipage}%[t%]%{\\textwidth%s*-%s*5.5mm%}"
          -- 匹配minipage结束标签
          local end_pattern = "\\end{minipage}"
          raw.text = raw.text:gsub(start_pattern, "")
          raw.text = raw.text:gsub(end_pattern, "")
        end
        return raw
      end
    })
    return el
  end
end

关键修改说明

  • 正则优化:加入%s*匹配任意数量的空格(包括0个),确保能匹配不同格式的minipage定义。
  • 逻辑简化:直接修改Div元素的content属性,利用walk方法递归遍历所有子元素,避免手动构建内容时的遗漏。
  • 移除冗余变量:删除未使用的in_calloutlonglist变量,精简代码逻辑。

使用方法

  1. 将上述脚本保存为remove-callout-minipage.lua。
  2. 在Quarto文档的YAML头部添加过滤器配置:
    filters: [remove-callout-minipage.lua]
    
  3. 重新渲染PDF文档,验证标注框内的超长列表是否能正常分页。

内容的提问来源于stack exchange,提问作者Produnis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:05:55