Lua 过滤器改动

人工智能与机器学习

概述

人工智能(AI)和机器学习(ML)是当今科技领域最热门的话题之一。AI是指计算机系统能够执行通常需要人类智能的任务,如视觉识别、语音识别和决策制定。ML是AI的一个子集,专注于开发能够从数据中学习的算法。

关键技术

深度学习

深度学习是ML的一个分支,使用多层神经网络来处理复杂的数据模式。它在图像和语音识别方面取得了显著的成果。

强化学习

强化学习是一种通过试错来学习的ML方法。它通常用于游戏和机器人控制等领域。

应用领域

医疗保健

AI和ML在医疗诊断、药物发现和个性化治疗方面有广泛应用。

金融

在金融领域,AI用于风险管理、欺诈检测和算法交易。

挑战

数据隐私

随着AI和ML的发展,数据隐私成为一个重要问题。如何在不侵犯个人隐私的情况下利用数据是一个挑战。

伦理问题

AI系统的决策过程可能不透明,这引发了关于伦理和责任的讨论。

未来展望

AI和ML的未来充满希望,但也伴随着挑战。随着技术的进步,我们期待看到更多创新的应用和解决方案。

Quarto v1.4 为 Lua 过滤器引入了以下新功能:

过滤器中可交叉引用的元素支持

Quarto v1.4 对图表、表格、列表等的处理方式进行了重大改动。 这些改动简化了针对这些元素的 Lua 过滤器的编写,但通常需要对现有过滤器进行修改。

FloatRefTarget AST 节点

在 v1.4 中,所有可交叉引用的元素都有一个通用的类型 FloatRefTarget。 这种元素可以在 Lua 过滤器中显式构造。 它也可以直接用作 Lua 过滤器中要处理的元素。

-- 一个针对 FloatRefTarget 节点的过滤器
return {
  FloatRefTarget = function(float)
    if float.caption_long then
      float.caption_long.content:insert(pandoc.Str("[这将出现在每个标题的开头]"))
      return float
    end
  end
}

FloatRefTarget 节点具有以下字段:

  • type:元素类型:FigureTableListing 等。Quarto v1.4 支持在文档或项目级别声明的自定义节点类型。
  • content:图表、表格等的内容。Quarto v1.4 接受任何 FloatRefTarget 类型中的任何内容(因此,如果您的表格更适合以图像形式显示,您可以使用它)。
  • caption_long:出现在文档正文中的标题。
  • caption_short:出现在元素汇编(如图表列表、表格列表等)中的标题。
  • identifierattributesclasses:这些与 Pandoc AST 元素(如 span 和 div)中的 Attr 字段类似。此外,identifier 需要是用于交叉引用(如 fig-carstbl-voteslst-query 等)的字符串。
  • parent_id:如果 FloatRefTarget 是父多元素浮动的子浮动,则 parent_id 将保存父浮动的标识符。

自定义格式和自定义渲染器

Quarto v1.4 增加了对 Quarto AST 节点(如 FloatRefTargetCallout)的可扩展渲染器支持。 要声明自定义渲染器,请在 Lua 过滤器中添加以下内容:

local predicate = function(float)
  -- 如果应使用此渲染器则返回 true;
  -- 通常,如果自定义格式处于活动状态,这将返回 true。
end
local renderer = function(float)
  -- 返回渲染图表的普通 Pandoc 表示形式。
end
quarto._quarto.ast.add_renderer(
  "FloatRefTarget", 
  predicate, 
  renderer)

require() 调用中的相对路径

在较大、较复杂的过滤器中,将 Lua 代码结构化为模块变得很有用。 Quarto v1.4 支持在 require() 调用中使用相对路径,以便轻松创建和重用小型模块。

例如:

filter.lua
local utility = require('./utils')
function Pandoc(doc)
  -- 处理
end

在 quarto 中使用相对路径这种方式,使得多个过滤器意外创建冲突模块名称(如使用标准 Lua require('utils') 语法时最终会发生的情况)变得更加困难。也可以引用子目录和父目录:

filter2.lua
local parsing = require('./utils/parsing')
function Pandoc(doc)
  -- 处理
end
utils/parsing.lua
local utils = require("../utils")
-- ...

更精确的 AST 处理阶段目标

在 Quarto 1.4 之前,Lua 过滤器要么是 “pre” 过滤器(默认设置),要么是 “post” 过滤器。 这些过滤器指定如下:

# "pre" 过滤器:
filters:
  - pre_filter_1.lua
  - pre_filter_2.lua  
  # ...
# "post" 过滤器:
filters:
  - quarto
  - post_filter_1.lua
  - post_filter_2.lua  
  # ...

此语法在 1.4 中继续有效。 此外,现在可以更精确地指定特定过滤器插入的位置。 Quarto 的 AST 处理阶段现在分为三个部分:astquartorender

  • ast:从 Pandoc 规范输入语法,识别 CalloutFloatRefTarget 等构造。
  • quarto:处理规范化的语法,例如通过解析交叉引用。
  • render:从处理后的输入生成特定格式的输出。

在 Quarto 1.4 中,Lua 过滤器可以在这些阶段的任意一个之前或之后插入:

filters:
  - at: pre-ast
    path: filter1.lua
  - at: post-quarto
    path: filter2.lua
  - at: post-render
    path: filter3.lua

任何阶段都可以加上 pre-post- 前缀。 在 Quarto 1.4 中,pre-quartopost-ast 在过滤器链中的插入位置相同,post-quartopre-render 也是如此。 Quarto 1.3 中的 “pre” 和 “post” 过滤器语法仍然有效。 “Pre” 过滤器在 pre-quarto 入口点注入,“post” 过滤器在 post-render 入口点注入。

新语法也支持 JSON 过滤器,就像 1.3 过滤器一样。 要么显式使用type: json,要么使用一个不以.lua结尾的路径。 反之,type: lua将强制文件被视为Lua过滤器。