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 后应回归测试关键模板。

参考与下一步

相关推荐
土豆125010 小时前
AI 编程可维护性技能实战:让 AI 成为你的代码质量守门员
llm·ai编程
Pkmer17 小时前
为基于LLM应用开发而生的LangChain框架
langchain·llm
七七powerful18 小时前
AI实战--从零构建的「微舆」:一个多智能体舆情分析系统的架构解析与实践指南
架构·llm·微舆·bettafish
tzy2331 天前
AI 对话的流式输出详解——不止于SSE
javascript·ai·llm·sse·readablestream
张宇宙1 天前
MLX-Qwopus3.5-9B 在 oMLX 中无法识别图片的排查与解决
llm
iiiiii111 天前
【论文阅读笔记】ReVal:让大模型强化学习真正支持离策略(off-policy)数据复用
论文阅读·笔记·语言模型·大模型·llm
熊猫钓鱼>_>1 天前
从“流程固化“到“意图驱动“:大模型调智能体调Skill架构深度解析
ai·架构·大模型·llm·agent·skill·openclaw
Baihai_IDP2 天前
微软多模态推理模型 Phi-4-reasoning-vision 训练经验分享
人工智能·面试·llm
Pitayafruit2 天前
Windows 也能跑 Hermes Agent!完整安装教程 + 飞书接入,全程避坑
人工智能·llm·agent