内置函数的使用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样式表中定义的内联格式的默认样式的使用规则是什么?我想使用 Mathematica 为我的包中的usage
Message
添加内联格式,而无需安装Workbench等其他组件。
P.S。 String
中嵌入式内嵌格式的语法部分记录在教程页面“String Representation of Boxes”中。关于此语法的官方新闻组中的相关问题:“(any documentation for) linear syntax?”在FrontEnd中显示此类字符串由ShowStringCharacters->False
的选项Cell
控制。
答案 0 :(得分:1)
我认为最简单的方法是使用前端格式化字符串。 如果您正在编写程序包,则可以使用“自动保存程序包”(即当笔记本的初始化单元格的内容成为程序包时)。 如果您使用文本编辑器编写包,那么使用格式化可能会太麻烦......
答案 1 :(得分:1)
处理这样的字符串的一个问题是Mathematica中大多数带字符串的操作会自动用反斜杠(\
)替换反斜杠(\\
)。
如果您尝试这样做:
你可能认为你有你正在寻找的字符串(减去\!
以使其成为表达式),但事实上它是:"\\(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,直接将其转换为格式化表达式
答案 2 :(得分:1)
这个答案是对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的Notebook中插入此行会给出原始表达式(自己尝试一下!):