我目前正在为具有附加功能的较新的 Mathematica 版本重写您的ApplicationMaker,并在这里遇到了完全相同的问题。
我的回答很简单:Mathematica 不允许您对符号使用格式化摘要(甚至是内置符号),因此我们必须取消格式化摘要的使用字符串。使用字符串本身仍然可以进行格式化,但需要有一个函数可以从字符串中删除所有格式化框。
我有一个使用John FultzUndocumentedTestFEParserPacket描述的解决方案!在这个问题中。
这个有趣的命名工具将字符串输入解析为真正未更改的 Mathematica BoxForm。
这是我的示例代码:
str0 = Sum::usage
str1=StringJoin[ToString[StringReplace[#, "\\\"" -> "\""]]& /@
(Riffle[MathLink`CallFrontEnd[
FrontEnd`UndocumentedTestFEParserPacket[str0, True]]〚1〛
//. RowBox[{seq___}] :> seq /. BoxData -> List, " "]
/. SubscriptBox[a_, b_] :> a<>"_"<>b
/. Except[List, _Symbol][args__] :> Sequence@@Riffle[{args}, " "])];
str2 = Fold[StringReplace, str1,
{((WhitespaceCharacter...)~~br:("["|"("|"=") ~~ (WhitespaceCharacter ...)) :> br,
((WhitespaceCharacter ...) ~~ br:("]"|"}"|","|".")) :> br,
(br:("{") ~~ (WhitespaceCharacter ...)) :> br,
". " ~~ Except[EndOfString] -> ". \n"}]
这就是输出的样子(第一个输出格式是花哨str0的,第二个是简单的平面str2)

代码说明:
str0是带有所有样式框和其他格式框的格式化用法字符串。
str1:
UndocumentedTestFEParserPacket[str0, True]给出 Boxes 和 strips off all StyleBoxes,那是因为第二个参数是 True。第一次替换删除所有RowBoxes. 外部BoxForm更改为字符串列表。在这些字符串之间插入空格 by Riffle。SubscriptBox 得到特殊处理。最后一行替换了所有剩余的 FormatBox,例如UnderoverscriptBox,它通过在参数之间添加空格并将参数作为平面序列返回来实现。
ToString[StringReplace[#, "\\\"" -> "\""]]& /@
添加以包括更多案例,例如StringReplace::usage. 这种情况包括""在使用字符串中带有样式的字符串表示,当"args"必须作为字符串给出时。
字符串 2:
在这段代码中,我只WhitespaceCharacter从字符串 str1中删除不需要的,并"/n"在 之后添加换行符".",因为它们在解析过程中丢失了。有 3 种不同的情况WhitespaceCharacter可以删除。1WithespaceCharacter从像"[". 2. 和 3. 从左侧 (2) 或右侧 (3) 移除 WithespaceCharacter。
概括
取而代之的是summary-> mySymbol::usage,使用summary -> unformatString[mySymbol::usage]withunformatString是执行上述取消格式化的适当功能。
或者,您可以手动定义另一个使用消息,例如
f::usage = "fancy string with formating";
f::usage2 = "flat string without formating";
比使用摘要-> mySymbol::usage2