POML 空白控制(White Space Control)

POML 空白控制(White Space Control)

参考官方文档:

注意:该特性为"实验性(experimental)",未来版本可能变更,请谨慎使用。


概览

  • whiteSpace / white-space 属性 可用于大多数 POML 组件,用来精细控制文本空白(空格、换行、缩进)的处理方式。
  • 常见使用场景:精确排版、与不同"目标语法(Markdown/JSON/XML 等)"配合时的空白稳定性。

取值与默认行为(White Space Options)

  • 可用取值:
    • pre:原样保留所有空白(空格、Tab、换行)。
    • filter:移除首尾空白;在元素之间的空白做"标准化"(比如连续换行归并为空格)。
    • trim:仅移除内容开头与结尾的空白。
  • 默认值:
    • syntax="text" 时,默认是 pre
    • 其他语法默认是 filter
  • 作用范围:仅作用于"当前组件本身",不影响其子组件。若要批量应用,请考虑使用 <stylesheet>(见下文)。

基本示例(Example Usage)

poml 复制代码
<poml>
  <!-- 原样保留(pre) -->
  <p whiteSpace="pre" syntax="markdown">
    This   text    has multiple   spaces and indentation preserved.
    You can also include endless new lines.
  </p>

  <!-- 归并空白(filter) -->
  <p whiteSpace="filter">
    This   text will   have normalized spacing.
    New lines will also be reduced to a space.
  </p>

  <!-- 去首尾空白(trim) -->
  <p whiteSpace="trim">
     This text will have leading and trailing spaces removed.  
  </p>
</poml>

渲染后的整体文本(概念示意):

vbnet 复制代码
This text has multiple spaces and indentation preserved.
You can also include endless new lines.
This text will have normalized spacing. New lines will also be reduced to a space.
This text will have leading and trailing spaces removed.

  • whiteSpace 仅控制渲染到 IR(中间表示) 时的空白处理。
  • 当 IR 再被写出为 Markdown/JSON/XML 等具体格式时,生成器可能按目标语法规则进一步影响空白。

示例(Markdown 语法对空白的影响):

poml 复制代码
<poml syntax="markdown" whiteSpace="pre">
  Marker 0
  Marker 1
  <p>
    The first paragraph.
  </p>
  Marker 2
  <p>
    The second paragraph.
  </p>
  Marker 3
</poml>

可能写出为(单行示意):

sql 复制代码
Marker 0 Marker 1 The first paragraph. Marker 2 The second paragraph. Marker 3

若你需要"完全按字面保留空白",建议:

  • 使用 syntax="text"whiteSpace="pre"
  • 但注意:在 syntax="text" 下不能使用如 <p> 这类标签组件。

示例:

poml 复制代码
<poml syntax="text" whiteSpace="pre">
Line 1
  Line 2 (indented)
Line 3
</poml>

用样式表批量应用空白策略(Stylesheet)

当需要对多处/多类元素统一设置空白规则时,可使用 <stylesheet>

poml 复制代码
<poml>
  <stylesheet>
    { "p": { "whiteSpace": "pre" } }
  </stylesheet>

  <p> A    B     C </p>
  <p> D\n\nE </p>
</poml>

上例将对所有 <p> 应用 whiteSpace="pre"


实践建议与常见坑

  • 仅影响当前组件whiteSpace 不会递归影响子节点;需要全局/批量请用 <stylesheet>
  • 目标语法影响:即使 IR 中保留了空白,写出到 Markdown/JSON/XML 时仍可能被目标语法再次规整。
  • 与 syntax 配合 :追求"字面保持"时优先 syntax="text" + pre;但不能混用结构化标签(如 <p>)。
  • 属性别名 :同时支持 whiteSpacewhite-space 两种写法;风格上建议统一。
  • 实验性特性:未来可能变更,升级 POML 后应回归测试关键模板。

参考与下一步

POML 空白控制(White Space Control)

参考官方文档:

注意:该特性为"实验性(experimental)",未来版本可能变更,请谨慎使用。


概览

  • whiteSpace / white-space 属性 可用于大多数 POML 组件,用来精细控制文本空白(空格、换行、缩进)的处理方式。
  • 常见使用场景:精确排版、与不同"目标语法(Markdown/JSON/XML 等)"配合时的空白稳定性。

取值与默认行为(White Space Options)

  • 可用取值:
    • pre:原样保留所有空白(空格、Tab、换行)。
    • filter:移除首尾空白;在元素之间的空白做"标准化"(比如连续换行归并为空格)。
    • trim:仅移除内容开头与结尾的空白。
  • 默认值:
    • syntax="text" 时,默认是 pre
    • 其他语法默认是 filter
  • 作用范围:仅作用于"当前组件本身",不影响其子组件。若要批量应用,请考虑使用 <stylesheet>(见下文)。

基本示例(Example Usage)

poml 复制代码
<poml>
  <!-- 原样保留(pre) -->
  <p whiteSpace="pre" syntax="markdown">
    This   text    has multiple   spaces and indentation preserved.
    You can also include endless new lines.
  </p>

  <!-- 归并空白(filter) -->
  <p whiteSpace="filter">
    This   text will   have normalized spacing.
    New lines will also be reduced to a space.
  </p>

  <!-- 去首尾空白(trim) -->
  <p whiteSpace="trim">
     This text will have leading and trailing spaces removed.  
  </p>
</poml>

渲染后的整体文本(概念示意):

vbnet 复制代码
This text has multiple spaces and indentation preserved.
You can also include endless new lines.
This text will have normalized spacing. New lines will also be reduced to a space.
This text will have leading and trailing spaces removed.

  • whiteSpace 仅控制渲染到 IR(中间表示) 时的空白处理。
  • 当 IR 再被写出为 Markdown/JSON/XML 等具体格式时,生成器可能按目标语法规则进一步影响空白。

示例(Markdown 语法对空白的影响):

poml 复制代码
<poml syntax="markdown" whiteSpace="pre">
  Marker 0
  Marker 1
  <p>
    The first paragraph.
  </p>
  Marker 2
  <p>
    The second paragraph.
  </p>
  Marker 3
</poml>

可能写出为(单行示意):

sql 复制代码
Marker 0 Marker 1 The first paragraph. Marker 2 The second paragraph. Marker 3

若你需要"完全按字面保留空白",建议:

  • 使用 syntax="text"whiteSpace="pre"
  • 但注意:在 syntax="text" 下不能使用如 <p> 这类标签组件。

示例:

poml 复制代码
<poml syntax="text" whiteSpace="pre">
Line 1
  Line 2 (indented)
Line 3
</poml>

用样式表批量应用空白策略(Stylesheet)

当需要对多处/多类元素统一设置空白规则时,可使用 <stylesheet>

poml 复制代码
<poml>
  <stylesheet>
    { "p": { "whiteSpace": "pre" } }
  </stylesheet>

  <p> A    B     C </p>
  <p> D\n\nE </p>
</poml>

上例将对所有 <p> 应用 whiteSpace="pre"


实践建议与常见坑

  • 仅影响当前组件whiteSpace 不会递归影响子节点;需要全局/批量请用 <stylesheet>
  • 目标语法影响:即使 IR 中保留了空白,写出到 Markdown/JSON/XML 时仍可能被目标语法再次规整。
  • 与 syntax 配合 :追求"字面保持"时优先 syntax="text" + pre;但不能混用结构化标签(如 <p>)。
  • 属性别名 :同时支持 whiteSpacewhite-space 两种写法;风格上建议统一。
  • 实验性特性:未来可能变更,升级 POML 后应回归测试关键模板。

参考与下一步

相关推荐
聚客AI1 小时前
❗️智能体工作流(Agentic Workflow):AI应用开发的全面解析
人工智能·llm·agent
掘我的金4 小时前
POML Meta 元素与运行配置(Meta, Stylesheet, Output Schema, Tools, Runtime)
llm
神经星星5 小时前
【vLLM 学习】Mlpspeculator
开源·llm·源码
量子位1 天前
售价2万5!英伟达推出机器人“最强大脑”:AI算力飙升750%配128GB大内存,宇树已经用上了
llm·ai编程
闲不住的李先森1 天前
AI 应用演进:从基础调用到自主智能体
人工智能·llm·aigc
聚客AI1 天前
💬深入解析:向量数据库如何为LLMs添加长期记忆
人工智能·llm·掘金·日新计划
AI大模型1 天前
如何成为一名成功的AI产品经理:从传统产品到AI产品的转型之路
程序员·llm·agent
AI大模型1 天前
提示工程已死?恰恰相反,这5个高阶玩法才是拉开差距的关键
程序员·llm·agent
掘金安东尼1 天前
Claude Code 的“隐藏护城河”:GPT-5 也过不去的优化秘密
人工智能·llm