私は現在、ApplicationMakerを新しいMathematicaバージョンに書き直して機能を追加しましたが、まったく同じ質問がここにありました。
私の答えは簡単です:Mathematicaでは、整形されたサマリーをシンボルに使用することはできません(またはシンボルでビルドすることもできます)ので、サマリーの使用文字列を整形する必要があります。 usagestring自体はまだ書式設定が可能ですが、文字列からすべての書式設定ボックスを削除する関数が必要です。
John Fultzで説明されているようにUndocumentedTestFEParserPacket
を使用するソリューションがあります。 thisに質問があります。
この面白い名前のツールは、String Inputを実際の変更されていない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__] :> [email protected]@Riffle[{args}, " "])];
str2 = Fold[StringReplace, str1,
{((WhitespaceCharacter...)~~br:("["|"("|"=") ~~ (WhitespaceCharacter ...)) :> br,
((WhitespaceCharacter ...) ~~ br:("]"|"}"|","|".")) :> br,
(br:("{") ~~ (WhitespaceCharacter ...)) :> br,
". " ~~ Except[EndOfString] -> ". \n"}]
、これは出力が(最初の出力フォーマットされた空想str0
、str2
第2のシンプルフラット)どのように見えるかです
コード説明:
str0は、すべてのStyleBoxとその他の書式設定ボックスを使用した書式付きusagestringです。
STR1:
UndocumentedTestFEParserPacket[str0, True]
は、ボックスを提供し、すべてのStyleBoxes
を取り除き2番目の引数がtrueであるため、thatsの。 最初に交換すると、すべてRowBoxes
が削除されます。外側のBoxForm
が文字列のリストに変更されました。これらの文字列の間に空白が挿入されるのはRiffle
です。 SubscriptBoxは特別な扱いを受けます。最後の行は、残りのすべてのFormatBoxをUnderoverscriptBox
のように置き換え、引数間にホワイトスペースを追加し、引数をフラットSequenceとして返すことで行います。
ToString[StringReplace[#, "\\\"" -> "\""]]& /@
は、StringReplace::usage
のように多くの場合を含むように追加されました。このケースでは、"args"
を文字列として指定する必要がある場合は、文字列表現""
を使用文字列の中のスタイルとともに使用します。
STR2:
このコードブロックでは私は、文字列STR1から不要なWhitespaceCharacter
を削除し、それらを、解析時に失われてしまったので、私は、"."
後に改行"/n"
を追加します。 WhitespaceCharacter
を取り除くことができる3つの異なる場合があります。 のような文字から左右両側のWithespaceCharacter
を削除します。 2. WithespaceCharacterを左(2)または右(3)側から削除する。 summary-> mySymbol::usage
の
概要
Istead、unformatString
は上記descripedようunformatingをperformes適切な関数であるとsummary -> unformatString[mySymbol::usage]
を使用します。
別の方法としては、使用の要約よりも
f::usage = "fancy string with formating";
f::usage2 = "flat string without formating";
のように手動で別の使用方法のメッセージを定義することができます - > mySymbol :: usage2
それは私がやっていることです。私はノートブックでメッセージをフォーマットし、それらをパッケージに自動保存しています。すべてがうまくいくようですが、私が気になるのは、ドキュメントセンターで検索するとすべてのボックスが表示されるということです。私はフォーマットされたバージョンと別の 'Usage.m'ファイルを持たなければならないのだろうかと思います。この場合、どこに配置されますか? – jmlopez
@jmlopezここでの意味を理解できませんでした。「ドキュメントセンターで検索すると、すべてのボックスも表示されます。 .mファイルを直接編集しないと、メッセージ用に別のファイルを作成する必要はありません。そうした場合は、メッセージの自動保存パッケージを予約し、結果の.mファイルをパッケージのあるディレクトリ(またはそのサブディレクトリ)に置き、メインのパッケージファイルから読み込みます。 – Szabolcs
私の投稿を編集してスクリーンショットを追加して、私が意味するものを見ることができます。 – jmlopez