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
:元素类型:Figure
、Table
、Listing
等。Quarto v1.4 支持在文档或项目级别声明的自定义节点类型。content
:图表、表格等的内容。Quarto v1.4 接受任何FloatRefTarget
类型中的任何内容(因此,如果您的表格更适合以图像形式显示,您可以使用它)。caption_long
:出现在文档正文中的标题。caption_short
:出现在元素汇编(如图表列表、表格列表等)中的标题。identifier
、attributes
、classes
:这些与 Pandoc AST 元素(如 span 和 div)中的Attr
字段类似。此外,identifier
需要是用于交叉引用(如fig-cars
、tbl-votes
、lst-query
等)的字符串。parent_id
:如果FloatRefTarget
是父多元素浮动的子浮动,则parent_id
将保存父浮动的标识符。
自定义格式和自定义渲染器
Quarto v1.4 增加了对 Quarto AST 节点(如 FloatRefTarget
、Callout
)的可扩展渲染器支持。 要声明自定义渲染器,请在 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 处理阶段现在分为三个部分:ast
、quarto
和 render
。
ast
:从 Pandoc 规范输入语法,识别Callout
、FloatRefTarget
等构造。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-quarto
和 post-ast
在过滤器链中的插入位置相同,post-quarto
和 pre-render
也是如此。 Quarto 1.3 中的 “pre” 和 “post” 过滤器语法仍然有效。 “Pre” 过滤器在 pre-quarto
入口点注入,“post” 过滤器在 post-render
入口点注入。
新语法也支持 JSON 过滤器,就像 1.3 过滤器一样。 要么显式使用type: json
,要么使用一个不以.lua
结尾的路径。 反之,type: lua
将强制文件被视为Lua过滤器。