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

用法内置函数的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."

可以看到,这种内联格式化是基于Core.nb样式表的“样式用于内联格式化”一节中定义的样式集。 但是我还没有找到任何关于这些样式的文档以及任何关于向usage Message添加格式的方便算法的描述。

在Mathematica中添加内联格式到用户定义usage Message的便利方法是什么? Core.nb样式表中定义的内嵌格式的默认样式的使用规则是什么? 我想在网上格式化的添加usage Message在我的包只是数学S,无需安装其他组件,如工作台等。

PS String嵌入式内嵌格式的语法部分记录在教程页面“字符串表示框”中。 官方新闻组中有关此语法的相关问题:“(有关线性语法的任何文档)?” 在FrontEnd中显示这样的字符串由选项ShowStringCharacters->False of Cell


其中一个处理这样的字符串的问题是,在数学与字符串的大多数操作自动替换反斜线( 与转义反斜杠() )。

如果你尝试这样做:

你可能会认为你有你想要的字符串(减去!使它成为一个表达式),但实际上它是: "(x_(1, 2) [Equal] ((-b) [PlusMinus] @(b^2 -(4 a c)))/(2 a))"

我的解决方案远非优雅,但它的工作原理。

  • 从格式化的表达式生成框:
  • 选择输出,并进入菜单项Cell > Convert to > InputForm 。 结果:
  • 你现在可以编辑字符串,把! 在其前面和引号周围: "!(x _ (1, 2) == ((-b) [PlusMinus] @(b ^2 - (4 a c))) / (2 a))"
  • 如果您在外部编辑器中执行步骤3,请不要使用引号,只需输入! 在MMA中将结果粘贴回来,直接转换为格式化的表达式


    我认为最简单的方法就是使用前端格式化字符串。 如果你正在编写一个包,你可以使用“自动保存包”(即当笔记本的初始化单元的内容成为包时)。 如果您使用文本编辑器编写包,那么使用格式化可能会太麻烦...


    这个答案是对Sjoerd答案的补充。

    首先,我们不必使用FrontEnd命令Cell > Convert to > InputForm来获得线性形式的框。 我们可以通过将InputForm应用到MakeBoxes的输出来获得它:

    In[1]:= InputForm@MakeBoxes[Subscript[x, 1,2]==(-b[PlusMinus]Sqrt[b^2-4 a c])/(2 a)]
    Out[1]//InputForm=
    (x_(1, 2) == ((-b) [PlusMinus] @(b^2 - (4 a c)))/(2 a))
    

    其次,我们可以通过以下两种方式导出最终排版框的最终排版内嵌字符串表示形式(等同结果)(唯一的区别在于Put包装文本):

    OutputForm@
      StringInsert[
       ToString[
        InputForm@
         MakeBoxes[
          Subscript[x, 1, 2] == (-b [PlusMinus] Sqrt[b^2 - 4 a c])/(
           2 a)], OutputForm], "!", 1] >> "C:input.txt"
    
    Export["C:input.txt", 
     StringInsert[
      ToString[InputForm@
        MakeBoxes[
         Subscript[x, 1, 2] == (-b [PlusMinus] Sqrt[b^2 - 4 a c])/(2 a)],
        OutputForm], "!", 1], "String"]
    

    在这两种情况下,我们都会得到一行文件: !(x_(1, 2) == ((-b) ± @(b^2 - (4 a c)))/(2 a))

    在FrontEnd的笔记本中插入这行代码给出原始表达式(自己尝试!):

    链接地址: http://www.djcxy.com/p/35585.html

    上一篇: Convenient way to add inline formatting to usage Messages

    下一篇: First Person view of structures in mathematica