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

如何自定义rlang::abort项目符号格式?按指南操作仍无效

问题

我尝试自定义rlang::abort的项目符号,严格遵循rlang官方自定义条件样式指南操作,但在原生R控制台和RStudio控制台中仍显示默认项目符号。以下是测试代码、运行结果截图及会话信息,请问我忽略了什么?

options(cli.user_theme = list(
  ".cli_rlang .bullet-*" = list(before = "* "),
  ".cli_rlang .bullet-i" = list(before = "* "),
  ".cli_rlang .bullet-x" = list(before = "* "),
  ".cli_rlang .bullet-v" = list(before = "* "),
  ".cli_rlang .bullet->" = list(before = "* ")
))

rlang::abort(c(
  "The error message.",
  "*" = "Regular bullet.",
  "i" = "Informative bullet.",
  "x" = "Cross bullet.",
  "v" = "Victory bullet.",
  ">" = "Arrow bullet."
))

运行结果

  • 标准R控制台:
    标准R控制台中显示默认项目符号的rlang::abort消息
  • RStudio控制台:
    RStudio控制台中显示默认项目符号的rlang::abort消息

会话信息

─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.4.1 (2024-06-14 ucrt)
 os       Windows 10 x64 (build 19045)
 system   x86_64, mingw32
 ui       Rgui
 language EN
 collate  German_Germany.utf8
 ctype    German_Germany.utf8
 tz       Europe/Berlin
 date     2024-12-02
 pandoc   3.2 @ <Path 1>

─ Packages ───────────────────────────────────────────────────────────────────
 package     * version date (UTC) lib source
 cli           3.6.3   2024-06-21 [1] CRAN (R 4.4.2)
 rlang         1.1.4   2024-06-04 [1] CRAN (R 4.4.2)
 sessioninfo   1.2.2   2021-12-06 [1] CRAN (R 4.4.1)

 [1] <Path 2>
 [2] <Path 3>

──────────────────────────────────────────────────────────────────────────────
解决方案

问题出在三个核心细节上:

  1. 选择器结构错误:当前版本的rlang与cli不再使用.cli_rlang嵌套选择器,直接使用.bullet相关类即可。
  2. 箭头符号的类名错误:箭头类型项目符号对应的cli类是.bullet-arrow,而非.bullet->,你之前的选择器完全匹配错误。
  3. 转义字符冗余:在R代码中定义主题时,无需对>做HTML转义,直接使用原始符号即可。

修正后的代码如下:

options(cli.user_theme = list(
  # 统一覆盖所有项目符号样式
  ".bullet" = list(before = "* "),
  # 若需单独指定某类符号,可补充以下条目
  ".bullet-i" = list(before = "* "),
  ".bullet-x" = list(before = "* "),
  ".bullet-v" = list(before = "* "),
  ".bullet-arrow" = list(before = "* ")
))

rlang::abort(c(
  "错误消息示例。",
  "*" = "常规项目符号。",
  "i" = "提示信息项目符号。",
  "x" = "叉号项目符号。",
  "v" = "对勾项目符号。",
  ">" = "箭头项目符号。"
))

补充说明:

  • 使用.bullet顶级选择器可以一次性覆盖所有类型的项目符号,无需逐个定义;如果需要为特定符号设置不同样式,再单独指定对应类即可。
  • 你当前使用的cli 3.6.3与rlang 1.1.4版本兼容,修正选择器后样式会立即生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:13:13