如何自定义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控制台:

- RStudio控制台:

会话信息
─ 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> ──────────────────────────────────────────────────────────────────────────────
解决方案
问题出在三个核心细节上:
- 选择器结构错误:当前版本的rlang与cli不再使用
.cli_rlang嵌套选择器,直接使用.bullet相关类即可。 - 箭头符号的类名错误:箭头类型项目符号对应的cli类是
.bullet-arrow,而非.bullet->,你之前的选择器完全匹配错误。 - 转义字符冗余:在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
相关产品推荐
相关产品推荐

