59

Mathematicaをしばらく使っているなら、おそらくドキュメンテーションセンターに愛着を持っているでしょう。それらのページには常に新しいものがあります。ある時点で役に立たなかった関数またはいくつかの例のオプションとします。

いつも使っている特殊な機能を使ってパッケージを書いている可能性があります。関数で使用するための優れた例を思いつくこともありますが、ハードディスクのどこかで忘れられてしまう可能性があります。あなたがそれを考えた瞬間にそれをドキュメンテーションに書いていたら、おそらく後で必死にそれを探すことはないでしょう。

このため、自分の関数のドキュメントをMathematicaのドキュメントセンターとプログラムで統合する方法を知りたいと思います。この質問は、ドキュメントを適応させる方法を探るためにここにあります。これを行うのに役立つスクリプトを作成した場合は、コミュニティと共有してください。

WolframのWorkbenchは、この質問に対する許容できる解決策ではありません。すべてはMathematicaのプレーンインストールで行わなければなりません。ソリューションがカバーすべきポイントがいくつかあります。

  1. 関数(できればテンプレート)のドキュメントを作成します。
  2. ガイドとチュートリアルの作成(有用と思われる場合)。
  3. ノートブックをドキュメントセンターにリンクします。
  4. さまざまな環境で正しく表示される「使用法」メッセージを作成します。
    • Mathematicaノートブックで?Symbol
    • ドキュメンテーションセンター内Search: Symbol

これは非常に幅広いトピックです。1、2、3の解決策があります。ポイント番号4がありません。では、ドキュメントセンターで関数をどのようにドキュメント化するのでしょうか。


アップデート

別の答えを追加しました。うまくいけば、この答えがMathematicaのユーザーに彼らのパッケージでドキュメンテーションページを書くことをもっと励ましてくれるでしょう。ドキュメントページを書くことは、アプリケーションの作成者だけでなく、アプリケーションのユーザーにとっても有益だと思います。私が書いたパッケージをダウンロードする場合は、チュートリアルに従って、すべてのステップで何が起こるかを確認することをお勧めします。これはあなたに将来のプロジェクトのための貴重な経験を与えるでしょう。

Github(2014年5月24日)

私がパッケージを書いたので、このパッケージに興味を持っている何人かの人々がいました。パッケージをGithubにアップロードしました:https ://github.com/jmlopez-rod/ApplicationMaker 。リポジトリへの寄稿者になりたい場合は、私に連絡してください。

4

3 に答える 3

48

ドキュメントセンターに組み込まれるドキュメントを作成する方法を示すために、非常に単純な関数とそのドキュメントを含むパッケージを作成します。パッケージを呼び出しましょうSOPackage。このパッケージは同じ名前のフォルダに保存され、そのようなフォルダはまたはのいずれかに保存する必要があり$BaseDirectoryます$UserBaseDirectory$。フォルダは次のSOPakageツリー構造である必要があります。

ここに画像の説明を入力してください

ルートがディレクトリであることに注意してください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

使用法メッセージは通常、特別な方法でパラメータをフォーマットすることに注意してください。このフォーマット(@ alexey-popkovによって指摘される)を取得するためのショートカットは、フォーマットしたい文字を強調表示し、Command+0Alt+0Windowsで)を押して「TI」と入力することです。変更が必要なすべての文字について、このプロセスを繰り返します。を介してセルを初期化セルに変更しCell->CellProperties->Initialization Cellます。ここで、このノートブックをとして保存しSOPackage.nbます。セルを初期化セルに変更するのを忘れたためにMathematicaがパッケージを作成するかどうか尋ねなかった場合は、に進むことができますFormat->OptionInspector。「SOPackage.nbのオプション」を選択していることを確認してください。選択していない場合、trueに設定する必要のあるオプションはグレー表示されます。次にクリックしNotebook Options->FileOptions->AutoGeneratedPackageて選択しますAutomatic。オプションウィンドウを閉じて、ファイルを保存します。SOPackage.nbファイルを保存するたびSOPackage.mに更新されます(このmファイルを台無しにしないでください)。

ディレクトリには、次のKernel1つのファイルのみを含める必要があります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または他のOSで同等のもの)。それらがあなたが行っているものであることがわかるように、いくつかの変更を加えます。私の場合、CombinatoricaをSOPackageに置き換えました。テキストの一部を変更できない場合は、次のようにする必要があります。

1:変更できないテキストをクリックします。

ここに画像の説明を入力してください

2:Windowsに移動するCell->Show Expressionか、入力するか、同等のものを入力します。Command+Shift+E

ここに画像の説明を入力してください

3:式の2番目の引数を探しCellます(フォームのオプションの直前A -> B)。これはスタイル名です。場合によっては、「Usage」、「Notes」、「ObjectName」などが表示されます。変更できないセルのスタイルを見つけたら、編集しているノートブックをクリックして入力Command+Shift+Eし、式を表示します。

4:に移動しFormat->Edit StyleSheet...、前に見たスタイル名をの下に入力しますEnter a style name:

ここに画像の説明を入力してください

5:スタイルを示すセルが表示されます。このセルが選択されていることを確認して、に移動しFormat->Object Inspectorます。それが言うことを確認してくださいShow option values Selection

6:に移動してtrueEditing Optionsに設定Editableします。

ここに画像の説明を入力してください

7:変更不可を変更します。

ここに画像の説明を入力してください

スクリーンショットに示したように、最初に編集できるようにするすべてのスタイルの名前を入力することをお勧めします。これまでのところ、手順3で説明したものだけを変更しました。リストにそれらを追加したら、それらをすべて選択し、を一度に編集可能に設定します。もう1つの重要な点は、このファイルがテンプレートになる可能性があることです。このファイルをどこかに保存する必要があります。ドキュメントを作成する必要がある場合は、ファイルを開いて、正しいパスに別の名前で保存し、既存のドキュメントノートブックからセルのコピーを開始します。

このガイドをどのように作成するかはあなた次第です。今のところ、ナンセンスを入れましょう。私のスクリーンショットが表示されます。次の2つのファイルは、関数のドキュメントです。テンプレートファイルをコピーしてに貼り付け、ファイルに名前SOPackage/Documentation/English/ReferencePages/Symbolsを付けます。気に入ったドキュメントを探して、たとえば、情報をコピーしてそれらのファイルに貼り付けます。名前を変更して、それらがどのように機能するかを示します。AddTwo_E.nbDotTwo_E.nbSin

テンプレートファイルの作成を確実に減らすことができます。プログラムでこれを行う方法を誰かが知っている場合は、ここでこのセクションを編集して、コードに置き換えてください。あなたは私たち全員に大きな恩恵を与えるでしょう。

PacletInfo.m

このファイルはディレクトリのすぐ下にSOPackageあり、次のものが含まれています。

Paclet[
Name -> "SOPackage",
Version -> "0.0.1",
MathematicaVersion -> "8+",
Extensions -> {{
    "Documentation", 
    Resources -> {
        "Guides/SOPackage"
    }, 
    Language -> "English"
}}
]

ドキュメントを準備する前に、最後にやらなければならないことが1つあります。すべての関数ドキュメントを編集不可にする必要があり、残りのドキュメントと同じ形式にする必要があります。今回は、これを行うスクリプトを作成しました。インデックスも作成するので、MakeDocと呼びます。このファイルを。の下に保存しますOSPackage。説明が得られるように、このファイルを2つの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];

このコードブロックは、編集可能な関数のドキュメントを開きます。正しい名前で保存されます。次に、属性を変更して編集できないようにし、残りのドキュメントと同じ外観にします。各関数について同じことを行います。usage関数のメッセージに「summary」が設定されていることに注意してください。これは、関数を検索したときに表示されるものです。

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関数ごとに1行にする必要があることに注意してください。MakeDoc.nbファイルを実行したAddTwo.nb後、、DotTwo.nbSOPackage.nb作成されます。これらのファイルは変更できません。。という名前のフォルダも表示されIndexます。これは、ドキュメントセンターの情報を含むすべてのバイナリデータです。ドキュメントに変更を加えた場合は、変更を有効にするために実行MakeDoc.nbする必要があります。これが現在のドキュメントツリーです。

ここに画像の説明を入力してください

この後、Mathematicaを再起動し、ドキュメントを試してみる必要があります。

これは、「SOPackage」を探すときに起こることです。

ここに画像の説明を入力してください

の使用法を探しましょうAddTwo

ここに画像の説明を入力してください

ドキュメントページへのリンクが付いた矢印が自動的に追加されたことに注意してください。

AddTwo残念ながら、ドキュメントセンターで検索すると、次のようになります。

ここに画像の説明を入力してください

関数の要約がフォーマットされないようにするにはどうすればよいですか?

ここからダウンロードして、コードを自由に変更してください。

読んでくれてありがとう。

マヌエル

于 2011-07-04T18:26:05.683 に答える
36

しばらく時間がかかりましたが、Mathematica ユーザーが文書化されたパッケージを作成できるように、文書化された Mathematica アプリケーションをようやく書き終えました。

このアプリケーションは と呼ばれApplicationMakerます。アプリケーションの作成に役立つさまざまな機能を備えた 3 つのパッケージが含まれています。これらの関数を使用すると、以前の回答で説明したすべての混乱をスキップできます。

私の Web サイトからダウンロードApplicationMakerすると、完全なアプリケーションを作成する方法とそのドキュメントを示す詳細なチュートリアルが見つかります。

概要

新しいアプリケーションを作成するには、 を呼び出して開始しますNewApplication。これにより、前の回答で述べたディレクトリ ツリーが作成されます。Mathematica のファイル構成の詳細については、ここをクリックしてください

次のステップは、パッケージを作成することです。そのためには、 を呼び出しますNewPackage。この関数は、コードを記述するテンプレートを作成します。

コードを書き終えたら、 を呼び出す必要がありますUpdateInit。これにより Mathematica が必要とするinitファイルが更新され、関数を使用できるようになりますGet (<<)

この時点で、ドキュメントを作成する準備が整いました。呼び出すだけCreateReferencePagesで、アプリケーション内の各シンボルの参照ページを文書化するために編集できる基本的な文書が作成されます。

NewGuideアプリケーションのガイドまたはチュートリアルを作成する場合は、 andを呼び出すことができますNewTutorial

編集が終わったら,Mathematica がドキュメントセンターに適応できるようにアプリケーションを構築する必要があります.これを行うには、 を呼び出しBuildApplicationます。

この時点で完了です。パッケージのシンボルのいずれかでを使用するInformationと、そのシンボルの参照ページにつながる矢印が追加されているはずです。

このアプリケーションを共有したい場合は、最初にデプロイする必要があります。現在のアプリケーションには、ドキュメンテーション センターで動作するリファレンス ページと、ユーザーが編集するリファレンス ページが含まれています。これをデプロイすることで、アプリケーションが動作するために必要なファイルのみを含むディレクトリを取得します。

インストール

またはにフォルダApplicationMakerをドロップするだけです。$UserBaseDirectory/Applications/$BaseDirectory/Applications/

開始するには、ドキュメンテーション センターを開き、「ApplicationMaker」を探します。これにより、パッケージに含まれるすべての機能を示すガイドが表示されます。一番下に、チュートリアルへのリンクが表示されます。

最後の言葉

これは私がMathematica 用に作成した最初のアプリケーションです. パッケージをより良くするために新しいことを発見して、パッケージを更新し続けようとします。今のところ、この ApplicationMaker の最初のバージョンが、Mathematica アプリケーションを文書化しようとしているすべての人にとって役立つことを願っています。

ここからApplicationMaker をダウンロードできます。

于 2011-07-12T06:47:23.723 に答える
4

ApplicationMaker をダウンロードし、Windows 7 64 ビットで Mathematica 10 を使用してテストしています。素晴らしい仕事と十分に文書化されています! を使用して新しいアプリケーションを作成するときに、セットアップで修正が必要な小さなエラーを発見しましたNewApplicationroot関数内の変数をMakeDirectory長さゼロの文字列にすることはできないようです (ディレクトリの作成時にエラーが発生します)。元のコードにテストを含めることでこれを修正しました。

MakeDirectory[root_, start_, main_, sub_] := Module[
  {nm, ns, tmp},
  nm = Position[main, start];
  If[Length@nm != 0, nm = nm[[1, 1]]];
  If[Length@sub[[nm]] != 0,
   Do[
    tmp = 
     If[StringLength[root] != 0, 
      FileNameJoin[{root, start, sub[[nm, i]]}], 
      FileNameJoin[{start, sub[[nm, i]]}]];
    If[DirectoryQ[tmp], 
     Print[Style["Existing Directory : ", "MSG", Gray], 
      Style[tmp, "MSG", Bold]], 
     CreateDirectory[tmp];
     Print[Style["Directory Created  : ", "MSG", Blue], 
      Style[tmp, "MSG", Bold]]
     ];
    , {i, Length@sub[[nm]]}]
   ];
  Do[
   MakeDirectory[
    If[StringLength[root] != 0, FileNameJoin[{root, start}], start], 
    sub[[nm, i]], main, sub],
   {i, Length@sub[[nm]]}
   ]
  ]
于 2015-02-13T09:51:38.887 に答える