jml*_*pez 7 wolfram-mathematica mathematica-8 usage-message
如果您查看Mathematica8中的Combinatorica包,您将找到函数的定义.我有兴趣知道的是Mathematica如何知道如何格式化使用信息.有些东西告诉我,我没有看正确的文件.无论如何,让我们尝试以下方法:(mathematicapath)/AddOns/LegacyPackages/DiscreteMath/Combinatorica.m
Cofactor::usage = "Cofactor[m, {i, j}] calculates the (i, j)th cofactor of matrix m."
Run Code Online (Sandbox Code Playgroud)
该行是上述文件中的682行.现在如果我们在mathematica笔记本中运行它并且我们使用,?Cofactor我们将看到完全相同的消息.但是如果我们得到包,那么消息就被格式化了.这是一个截图:

注意函数中的m,i和j是如何变化的,并且在消息中添加了一个双箭头.我认为箭头已添加到邮件中,因为它存在文档.有人可以解释这种行为吗?
编辑:这是我的笔记本文件的屏幕截图,自动保存到m文件.

正如你所看到的那样,L并且M在斜体时代是新的罗马.现在我将加载包并查看用法.

到现在为止还挺好.现在让我们看一下文档中心.我会寻找这个功能LineDistance.

如您所见,它显示了一个奇怪的消息.在这种情况下,我们只想显示没有任何样式的消息.我仍然无法弄清楚Combinatorica包是如何做到的.我按照这个来制作索引,以便doc中心可以显示摘要.摘要本质上是使用显示.如果我需要更具体,请告诉我.
好的,这是解释。
深入 Combinatorica 源代码揭示了这一点:
(* get formatted Combinatorica messages, except for special cases *)
If[FileType[ToFileName[{System`Private`$MessagesDir,$Language},"Usage.m"]]===File,
Select[FindList[ToFileName[{System`Private`$MessagesDir,$Language},"Usage.m"],"Combinatorica`"],
StringMatchQ[#,StartOfString~~"Combinatorica`*"]&&
!StringMatchQ[#,"Combinatorica`"~~("EdgeColor"|"Path"|"Thin"|"Thick"|"Star"|"RandomInteger")~~__]&]//ToExpression;
]
Run Code Online (Sandbox Code Playgroud)
它正在从ToFileName[{System`Private`$MessagesDir,$Language},"Usage.m"]我的机器上加载消息SystemFiles\Kernel\TextResources\English\Usage.m。这就是为什么所有使用消息都是有条件创建的Combinatorica.m(仅当它们尚不存在时)。如果你看一下,Usage.m你会发现它有 @ragfield 提到的所有丑陋的盒子。
我想格式化消息的最简单方法是在笔记本的前端编辑它们,并创建一个自动保存包。这样你就可以使用所有前端的格式化工具,并且不需要处理盒子。