方便的方法为使用消息添加内联格式

Ale*_*kov 6 wolfram-mathematica mathematica-frontend

使用Messages内置功能都嵌入线格式.例如:

In[1]:= ActionMenu::usage // FullForm

Out[1]//FullForm= 
"\!\(\*RowBox[{\"ActionMenu\", \"[\", RowBox[{StyleBox[\"name\", \"TI\
\"], \",\", RowBox[{\"{\", \
RowBox[{RowBox[{SubscriptBox[StyleBox[\"lbl\", \"TI\"], \
StyleBox[\"1\", \"TR\"]], \":>\", SubscriptBox[StyleBox[\"act\", \"TI\
\"], StyleBox[\"1\", \"TR\"]]}], \",\", \
RowBox[{SubscriptBox[StyleBox[\"lbl\", \"TI\"], StyleBox[\"2\", \
\"TR\"]], \":>\", SubscriptBox[StyleBox[\"act\", \"TI\"], \
StyleBox[\"2\", \"TR\"]]}], \",\", StyleBox[\"\[Ellipsis]\", \
\"TR\"]}], \"}\"}]}], \"]\"}]\) represents an action menu with label \
\!\(\*StyleBox[\"name\", \"TI\"]\), and with items labeled \
\!\(\*SubscriptBox[StyleBox[\"lbl\", \"TI\"], StyleBox[\"i\", \
\"TI\"]]\), that evaluates the expression \
\!\(\*SubscriptBox[StyleBox[\"act\", \"TI\"], StyleBox[\"i\", \
\"TI\"]]\) if the corresponding item is chosen."
Run Code Online (Sandbox Code Playgroud)

可以看到,这种内联格式化基于Core.nb样式表的"内联格式样式"部分中定义的样式集.但是我没有找到这些样式的任何文档以及向usage Messages 添加格式的方便算法的任何描述.

usage MessageMathematica中为用户定义的s 添加内联格式的便捷方法是什么?Core.nb样式表中定义的内联格式的默认样式的使用规则是什么?我想usage Message使用Mathematica为我的包中的s 添加内联格式,而无需安装Workbench等其他组件.

PS Strings中嵌入式内联格式的语法部分记录在教程页面" Box表示框"中.在此语法的官方新闻组相关的问题:" ?(对任何文档)线性语法 "显示在前台这样的字符串是由选项控制ShowStringCharacters->FalseCell.

Sjo*_*ies 1

处理此类字符串的问题之一是 Mathematica 中的大多数字符串操作都会自动将反斜杠 ( \) 替换为转义的反斜杠 ( \\)。

如果你尝试这样做:

在此输入图像描述

您可能认为您已经找到了要查找的字符串(减去\!使其成为表达式),但实际上它是:"\\(x\\_\\(1, 2\\) \[Equal] \\(\\(-b\\) \[PlusMinus] \\@\\(b\\^2 -\\(4\\ a\\ c\\)\\)\\)\\/\\(2\\ a\\)\\)"

我的解决方案远非优雅,但它有效。

  1. 从格式化表达式生成框: 在此输入图像描述
  2. 选择输出,然后转到菜单项Cell > Convert to > InputForm。结果: 在此输入图像描述
  3. 您现在可以编辑该字符串,将\!其放在前面并在其周围加上引号: "\!\(x \_ \(1, 2\) == \(\(-b\) \[PlusMinus] \@\(b \^2 - \(4\ a\ c\)\)\) \/ \(2\ a\)\)"

如果您在外部编辑器中执行步骤 3,请保留引号,只需将\!结果放在前面并将结果粘贴回 MMA 中,它会直接转换为格式化表达式