为了展示如何创建并入文档中心的文档,我们将创建一个包含非常简单的函数及其文档的包。让我们调用我们的包SOPackage
。此包将存储在同名文件夹中,该文件夹应存储在$BaseDirectory
或$UserBaseDirectory$
中。该SOPakage
文件夹需要具有以下树结构。
![在此处输入图像描述](https://i.stack.imgur.com/8njWx.png)
请注意,根是目录SOPackage
。
SOPackage
现在我们将在里面创建一个新的笔记本文件SOPackage
:SOPackage.nb
. 这些是笔记本的内容
BeginPackage["SOPackage`"];
AddTwo::usage = "AddTwo[\!\(\*StyleBox[\"a\", \"TI\"]\), \!\(\*StyleBox[\"b\", \"TI\"]\)] returns \!\(\*StyleBox[\"a\", \"TI\"]\)+\!\(\*StyleBox[\"b\", \"TI\"]\).";
DotTwo::usage = "DotTwo[\!\(\*StyleBox[\"a\", \"TI\"]\), \!\(\*StyleBox[\"b\", \"TI\"]\)] returns \!\(\*StyleBox[\"a\", \"TI\"]\)*\!\(\*StyleBox[\"b\", \"TI\"]\).";
AddTwo::argnum = "AddTwo was called with `1` arguments. It expected 2.";
DotTwo::argnum = "DotTwo was called with `1` arguments. It expected 2.";
Begin["`Private`"];
AddTwo[a_, b_] := a + b
AddTwo[args___] := (Message[AddTwo::argnum, Length[{args}]]; $Failed)
DotTwo[a_, b_] := a*b
DotTwo[args___] := (Message[DotTwo::argnum, Length[{args}]]; $Failed)
End[];
EndPackage[];
这是您应该看到的屏幕截图
![SOPackage](https://i.stack.imgur.com/s6mST.png)
请注意,使用消息通常以特殊方式格式化参数。获得这种格式的快捷方式(@alexey-popkov 指出)是突出显示要格式化的字母,按Command+0(Alt+0在 Windows 中)并输入“TI”。对所有需要修改的字母重复此过程。通过 将单元更改为初始化单元Cell->CellProperties->Initialization Cell
。现在我们将此笔记本保存为SOPackage.nb
. 如果Mathematica没有询问您是否要创建一个包,因为您忘记将单元格更改为初始化单元格,那么您可以转到Format->OptionInspector
. 确保选择“SOPackage.nb 的选项”,否则需要设置为 true 的选项将显示为灰色。现在单击Notebook Options->FileOptions->AutoGeneratedPackage
并选择Automatic
. 关闭选项窗口并保存文件。每次保存SOPackage.nb
文件SOPackage.m
都会更新(不要弄乱这个 m 文件)。
该Kernel
目录应仅包含一个文件:init.m
. 该文件需要有下一行:
Get["SOPackage`SOPackage`"];
在此之后,我们有一个工作包。您可以尝试以下操作以确保一切正常:
<<SOPackage`
?AddTwo
?DotTwo
DotTwo[]
DotTwo[2, 3]
文档
让我们从创建指南页面开始。这将是您SOPackage
在文档中心输入时显示的页面。让我们首先创建一个笔记本并将其保存SOPackage/Documentation/English/Guides
为SOPackage_E.nb
. 我给它扩展“_E”的原因是因为这将是一个可编辑的副本。请注意,您无法在文档中心编辑任何文档。好吧,您可以,但这些更改永远不会生效。您可能希望在构建包时修改文档,因此最好有一个可以编辑的副本。对于此示例,我们可以复制 的内容Combinatorica guide
,在文档中心类型Combinatorica/guide/CombinatoricaPackage
选择所有单元格,将它们复制并粘贴到您的SOPackage_E.nb
文件中(或者,复制文件C:\Program Files\Wolfram Research\Mathematica\10.4\Documentation\English\Packages\Combinatorica\Documentation\English\Guides\CombinatoricaPackage.nb
或其他操作系统上的等效项)。进行一些更改,以便您知道它们是您正在做的。就我而言,我用 SOPackage 替换了 Combinatorica。如果您无法修改文本的某些部分,您需要执行以下操作:
1:点击不能修改的文字。
![在此处输入图像描述](https://i.stack.imgur.com/sckH4.png)
2:转到Cell->Show Expression
或输入Command+Shift+E
或Windows中的等效项。
![在此处输入图像描述](https://i.stack.imgur.com/3miwk.png)
3:查找Cell
表达式中的第二个参数(就在表单的任何选项之前A -> B
)。这是一个样式名称。在某些情况下,您会看到“Usage”、“Notes”、“ObjectName”等。找到无法修改的单元格样式后,请单击您正在编辑的笔记本并输入Command+Shift+E
以显示表达式。
4:转到Format->Edit StyleSheet...
,输入您之前在 下看到的样式名称Enter a style name:
。
![在此处输入图像描述](https://i.stack.imgur.com/upgQw.png)
5:出现显示样式的单元格。确保选中此单元格并转到Format->Object Inspector
。确保它说Show option values
Selection。
6:转到Editing Options
并设置Editable
为true。
![在此处输入图像描述](https://i.stack.imgur.com/B9Y23.png)
7:修改不可修改。
![在此处输入图像描述](https://i.stack.imgur.com/rIJdi.png)
我建议您首先输入您希望能够编辑的所有样式的名称,如屏幕截图所示。到目前为止,我只更改了我在步骤 3 中提到的那些。一旦将它们放在列表中,请选择它们并立即将其设置为可编辑。另一个重要的一点是这个文件可以是一个模板。您应该将此文件保存在某处,当您需要制作文档时,只需打开它,在正确的路径中用另一个名称保存它,然后开始从现有的文档笔记本中复制单元格。
如何创建本指南取决于您。现在让我们废话。你会看到我的截图。接下来的两个文件是您的函数的文档。将您的模板文件复制并粘贴到SOPackage/Documentation/English/ReferencePages/Symbols
并命名文件AddTwo_E.nb
和DotTwo_E.nb
. 查找一些您喜欢的文档,Sin
例如,将信息复制并粘贴到这些文件中。我将更改名称只是为了展示它们的工作原理。
模板文件的创建肯定可以减少。如果有人知道如何以编程方式执行此操作,请随时在此处编辑此部分并将其替换为代码。你会帮我们大家一个大忙。
小包信息.m
该文件位于目录下SOPackage
,包含以下内容:
Paclet[
Name -> "SOPackage",
Version -> "0.0.1",
MathematicaVersion -> "8+",
Extensions -> {{
"Documentation",
Resources -> {
"Guides/SOPackage"
},
Language -> "English"
}}
]
在准备好文档之前,我们必须做最后一件事。我们需要使所有函数文档都不可编辑,并且我们必须赋予它与其余文档相同的格式。这次我写了一个脚本来做到这一点。我称它为 MakeDoc,因为它也会构建索引。将此文件保存在OSPackage
. 我将把这个文件分成 4 个部分,以便您得到解释。
pname = "SOPackage";
Get[pname <> "`"];
basepath = $UserBaseDirectory<>"/Applications/"<>pname<>"/Documentation/English/ReferencePages/Symbols/";
$UserBaseDirectory <> "/Applications/" <> pname <> "/Documentation/English/ReferencePages/Symbols/";
我们应该确保在执行此操作之前重新启动 Mathematica。首先,我们将加载包并设置所有函数文档的根目录。在下一步中,我们将基本上复制粘贴代码,我们将为每个函数执行以下操作。
snname := "AddTwo";
nb = NotebookOpen[basepath <> snname <> "_E.nb"];
NotebookSave[nb, basepath <> snname <> ".nb"];
SetOptions[nb,
TaggingRules -> {
"ModificationHighlight" -> False,
"Metadata" -> {
"context" -> pname <> "`",
"keywords" -> {},
"index" -> True,
"label" -> "OSPackage Package Paclet Symbol",
"language" -> "en",
"paclet" -> "OSPackage Package",
"status" -> "",
"summary" -> AddTwo::usage,
"synonyms" -> {},
"title" -> "AddTwo",
"type" -> "Symbol",
"uri" -> pname <> "/ref/AddTwo"},
"SearchTextTranslated" -> ""
}
];
SetOptions[nb, Saveable -> False];
SetOptions[nb,
StyleDefinitions ->
FrontEnd`FileName[{"Wolfram"}, "Reference.nb"]];
NotebookSave[nb];
此代码块打开可编辑的函数文档。它以正确的名称保存它。然后它会更改其属性,使其不可编辑,并使其具有与其余文档相同的外观。我们对每个函数都做同样的事情。请注意,“summary”设置为usage
函数的消息。这是我们在搜索函数时会看到的。
snname := "DotTwo";
nb = NotebookOpen[basepath <> snname <> "_E.nb"];
NotebookSave[nb, basepath <> snname <> ".nb"];
SetOptions[nb,
TaggingRules -> {
"ModificationHighlight" -> False,
"Metadata" -> {
"context" -> pname <> "`",
"keywords" -> {},
"index" -> True,
"label" -> "OSPackage Package Paclet Symbol",
"language" -> "en",
"paclet" -> "OSPackage Package",
"status" -> "",
"summary" -> DotTwo::usage,
"synonyms" -> {},
"title" -> "DotTwo",
"type" -> "Symbol",
"uri" -> pname <> "/ref/DotTwo"},
"SearchTextTranslated" -> ""
}
];
SetOptions[nb, Saveable -> False];
SetOptions[nb,
StyleDefinitions ->
FrontEnd`FileName[{"Wolfram"}, "Reference.nb"]];
NotebookSave[nb];
非常重要,我们没有修改指南,这就是它所需要的:
snname := "SOPackage";
nb = NotebookOpen[guidepath <> snname <> "_E.nb"];
NotebookSave[nb, guidepath <> snname <> ".nb"];
SetOptions[nb, Saveable -> False];
SetOptions[nb, StyleDefinitions -> FrontEnd`FileName[{"Wolfram"}, "Reference.nb"]];
NotebookSave[nb];
最后,我们像这样创建索引:
indir = $UserBaseDirectory<>"/Applications/"<>pname<>"/Documentation/English/Index";
If[FileNames[indir] != {}, DeleteDirectory[indir, DeleteContents -> True]];
ind = DocumentationSearch`NewDocumentationNotebookIndexer[indir];
DocumentationSearch`AddDocumentationNotebook[ind, basepath <> "AddTwo.nb"];
DocumentationSearch`AddDocumentationNotebook[ind, basepath <> "DotTwo.nb"];
DocumentationSearch`CloseDocumentationNotebookIndexer[ind];
请注意,我们需要AddDocumenationNotebook
为每个函数添加一行。运行MakeDoc.nb
文件后AddTwo.nb
,将创建。这些文件无法修改。您还将看到一个名为. 这是包含文档中心信息的所有二进制数据。如果您对文档进行了修改,您应该运行以使更改生效。这是我们现在拥有的文档树。DotTwo.nb
SOPackage.nb
Index
MakeDoc.nb
![在此处输入图像描述](https://i.stack.imgur.com/ogsPR.png)
在此之后,我们应该重新启动 Mathematica 并带上我们的文档。
这就是您查找“SOPackage”时发生的情况。
![在此处输入图像描述](https://i.stack.imgur.com/SXAL0.png)
让我们看看AddTwo
![在此处输入图像描述](https://i.stack.imgur.com/i2BGr.png)
请注意,带有指向文档页面的链接的箭头是自动添加的。
不幸的是,如果我们在文档中心搜索,AddTwo
我们会得到:
![在此处输入图像描述](https://i.stack.imgur.com/XWc9y.png)
我们如何才能使函数的摘要不被格式化?
随意从这里下载修改我的代码。
感谢您的阅读。
曼努埃尔