6

Messages組み込み関数の使用には、インライン フォーマットが埋め込まれています。例えば:

In[1]:= ActionMenu::usage // FullForm

Out[1]//FullForm= 
"\!\(\*RowBox[{\"ActionMenu\", \"[\", RowBox[{StyleBox[\"name\", \"TI\
\"], \",\", RowBox[{\"{\", \
RowBox[{RowBox[{SubscriptBox[StyleBox[\"lbl\", \"TI\"], \
StyleBox[\"1\", \"TR\"]], \":>\", SubscriptBox[StyleBox[\"act\", \"TI\
\"], StyleBox[\"1\", \"TR\"]]}], \",\", \
RowBox[{SubscriptBox[StyleBox[\"lbl\", \"TI\"], StyleBox[\"2\", \
\"TR\"]], \":>\", SubscriptBox[StyleBox[\"act\", \"TI\"], \
StyleBox[\"2\", \"TR\"]]}], \",\", StyleBox[\"\[Ellipsis]\", \
\"TR\"]}], \"}\"}]}], \"]\"}]\) represents an action menu with label \
\!\(\*StyleBox[\"name\", \"TI\"]\), and with items labeled \
\!\(\*SubscriptBox[StyleBox[\"lbl\", \"TI\"], StyleBox[\"i\", \
\"TI\"]]\), that evaluates the expression \
\!\(\*SubscriptBox[StyleBox[\"act\", \"TI\"], StyleBox[\"i\", \
\"TI\"]]\) if the corresponding item is chosen."

このインライン フォーマットは、Core.nb スタイルシートの「インライン フォーマットのスタイル」セクションで定義された一連のスタイルに基づいていることがわかります。しかし、これらのスタイルのドキュメントや、s にフォーマットを追加する便利なアルゴリズムの説明は見つかりませんでしたusage Message

Mathematicausage Messageでユーザー定義の s にインライン書式を追加する便利な方法は何ですか? Core.nb スタイルシートで定義されているインライン フォーマットのデフォルト スタイルの使用規則は何ですか? Workbench などの追加コンポーネントをインストールせずに、 Mathematicaだけでパッケージ内の s にインライン フォーマットを追加したいと思います。usage Message

PS s に埋め込まれたインライン フォーマットの構文はString、チュートリアル ページ「ボックスの文字列表現」に部分的に記載されています。この構文に関する公式ニュースグループの関連する質問: " (ドキュメントは) 線形構文ですか? " フロントエンドでのそのような文字列の表示は、 のオプションによって制御されShowStringCharacters->FalseますCell

4

3 に答える 3

1

この回答は、Sjoerd の回答への追加です。

まず第一に、Cell > Convert to > InputFormボックスの線形形式を取得するために FrontEnd コマンドを使用する必要はありません。InputFormの出力に適用するだけで取得できますMakeBoxes

In[1]:= InputForm@MakeBoxes[Subscript[x, 1,2]==(-b\[PlusMinus]Sqrt[b^2-4 a c])/(2 a)]
Out[1]//InputForm=
\(x\_\(1, 2\) == \(\(-b\) \[PlusMinus] \@\(b\^2 - \(4\ a\ c\)\)\)\/\(2\ a\)\)

次に、次の 2 つの方法で、ボックスの最終的な組版インライン文字列表現をエクスポートして、同等の結果を得ることができます (唯一の違いはPut、テキストをラップすることです)。

OutputForm@
  StringInsert[
   ToString[
    InputForm@
     MakeBoxes[
      Subscript[x, 1, 2] == (-b \[PlusMinus] Sqrt[b^2 - 4 a c])/(
       2 a)], OutputForm], "\\!", 1] >> "C:\\input.txt"

Export["C:\\input.txt", 
 StringInsert[
  ToString[InputForm@
    MakeBoxes[
     Subscript[x, 1, 2] == (-b \[PlusMinus] Sqrt[b^2 - 4 a c])/(2 a)],
    OutputForm], "\\!", 1], "String"]

どちらの場合も、1 行のファイルを取得します: \!\(x\_\(1, 2\) == \(\(-b\) ± \@\(b\^2 - \(4\ a\ c\)\)\)\/\(2\ a\)\).

FrontEnd の Notebook にこの行を挿入すると、元の式が得られます (自分で試してみてください!)。

スクリーンショット

于 2011-06-21T14:39:08.357 に答える
1

最も簡単な方法は、フロントエンドを使用して文字列をフォーマットすることだと思います。パッケージを作成している場合は、「自動保存パッケージ」を使用できます (つまり、ノートブックの初期化セルの内容がパッケージになる場合)。テキスト エディタを使用してパッケージを作成する場合、書式設定を使用するのは面倒かもしれません ...

于 2011-06-21T08:17:50.700 に答える
1

\このように文字列を処理する際の問題の 1 つは、Mathematica での文字列に対するほとんどの操作で、バックスラッシュ ( ) がエスケープされたバックスラッシュ ( ) に自動的に置き換えられること\\です。

これを試してみると:

ここに画像の説明を入力

探している文字列があると思うかもしれません (\!式にするための を差し引いたもの)。しかし、実際には次のようになります。"\\(x\\_\\(1, 2\\) \[Equal] \\(\\(-b\\) \[PlusMinus] \\@\\(b\\^2 -\\(4\\ a\\ c\\)\\)\\)\\/\\(2\\ a\\)\\)"

私のソリューションはエレガントとはほど遠いですが、うまくいきます。

  1. フォーマットされた式からボックスを生成します。 ここに画像の説明を入力
  2. 出力を選択し、メニュー項目 に移動しますCell > Convert to > InputForm。結果: ここに画像の説明を入力
  3. 文字列を編集して、その前に置き\!、引用符で囲むこと ができるようになりました。"\!\(x \_ \(1, 2\) == \(\(-b\) \[PlusMinus] \@\(b \^2 - \(4\ a\ c\)\)\) \/ \(2\ a\)\)"

外部エディターでステップ 3 を実行する場合、引用符を残して、\!MMA の結果を前に貼り付けて、書式設定された式に直接変換します。

于 2011-06-21T12:38:08.350 に答える