2011-06-21 13 views
6

Użytkowania Messages funkcji wbudowanych w nie wbudowane formatowania inline. Na przykład:wygodny sposób dodać formatowanie inline do użytkowania Wiadomości

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." 

Można zobaczyć, że formatowanie in-line oparta jest na zestawie stylów zdefiniowanych w „style formatowania Inline” części arkusza Core.nb. Ale nie znalazłem żadnej dokumentacji dla tych stylów, jak również żadnego opisu wygodnego algorytmu dodawania formatowania do usageMessage s.

Co to wygodny sposób, aby dodać w linii formatowania zdefiniowanych przez użytkownika usageMessage sw Mathematica? Jakie są reguły użycia domyślnych stylów formatowania wbudowanego zdefiniowanego w arkuszu stylów Core.nb? Chciałbym dodać w linii formatowania do usageMessage jest w moim pakiecie tylko z Mathematica, bez konieczności instalowania dodatkowych komponentów jak Workbench itp

PS: Składnia osadzonego formatowania in-line w String s jest częściowo udokumentowana na stronie samouczka "String Representation of Boxes." Powiązane pytanie w oficjalnej grupie dyskusyjnej na temat tej składni: "(any documentation for) linear syntax?" Wyświetlanie takich ciągów w FrontEnd jest sterowane opcją ShowStringCharacters->False z Cell.

+0

Podobne http://www.mathematicahelp.info/minor-progress-with- 6-0-dokumentacja –

+5

Nie zamieszczam tego jako odpowiedzi, ponieważ wyraźnie zignorowałeś WorkBench. Ale myślę, że szukasz czegoś podobnego do tej palety http://reference.wolfram.com/workbench/index.jsp?topic=/com.wolfram.eclipse.help/html/reference/DocumentationTools/tutorial/AuthoringSymbolPagesUsingDocumentationTools.html –

Odpowiedz

1

Jednym z problemów z obsługą ciągów takich jak ta jest to, że większość operacji z ciągami w Mathematica automatycznie zastępuje ukośnik odwrotny (\) ze zmienionym ukośnikiem odwrotnym (\\).

Jeśli spróbujesz to:

enter image description here

może uważasz, że masz ciąg szukasz (Minus \! aby to wyrażenie), ale w rzeczywistości jest to: "\\(x\\_\\(1, 2\\) \[Equal] \\(\\(-b\\) \[PlusMinus] \\@\\(b\\^2 -\\(4\\ a\\ c\\)\\)\\)\\/\\(2\\ a\\)\\)"

Moje rozwiązanie jest dalekie od eleganckiego, ale działa.

  1. Generowanie pudełka z sformatowanych wypowiedzi: enter image description here
  2. Wybierz wyjście, a następnie przejdź do pozycji menu Cell > Convert to > InputForm. Rezultat: enter image description here
  3. Teraz można edytować ciąg, stawiając \! przed nim i cytatów wokół niego: "\!\(x \_ \(1, 2\) == \(\(-b\) \[PlusMinus] \@\(b \^2 - \(4\ a\ c\)\)\) \/ \(2\ a\)\)"

Jeśli wykonać krok 3 w zewnętrznym edytorze, zostaw cytaty i po prostu \! z przodu i wklej wynik do MMA, który jest bezpośrednio konwertowany na sformatowane wyrażenie:

+0

+ 1. Nie zdawałem sobie sprawy z tego, że 'InputForm' skrzynek ma kształt liniowy. Zobacz moją odpowiedź na dodatkowe obserwacje. –

1

Myślę, że najprostszym sposobem jest po prostu użyć przedniej części sformatować ciąg. Jeśli piszesz pakiet, możesz użyć "auto-save packages" (tj. Gdy zawartość komórek inicjalizujących notebooka stanie się pakietem). Jeśli do napisania pakietu użyjesz edytora tekstu, może być zbyt dużym kłopotem korzystanie z formatowania ...

1

Ta odpowiedź jest dodatkiem do odpowiedzi Sjoerd.

Po pierwsze, nie musimy używać polecenia FrontEnd Cell > Convert to > InputForm, aby uzyskać liniową formę pól. Możemy dostać tylko poprzez zastosowanie InputForm do wyjścia MakeBoxes:

In[1]:= [email protected][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\)\) 

Po drugie, możemy wyeksportować ostateczny skład publikacji w-line reprezentację ciąg pól przez dwóch poniższych sposobów z równoważny skutek (jedyną różnicą jest to, że Put zawija tekst):

[email protected] 
    StringInsert[ 
    ToString[ 
    [email protected] 
    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[[email protected] 
    MakeBoxes[ 
    Subscript[x, 1, 2] == (-b \[PlusMinus] Sqrt[b^2 - 4 a c])/(2 a)], 
    OutputForm], "\\!", 1], "String"] 

w obu przypadkach otrzymujemy plik z jednej linii: \!\(x\_\(1, 2\) == \(\(-b\) ± \@\(b\^2 - \(4\ a\ c\)\)\)\/\(2\ a\)\).

Wstawianie tej linii w zeszycie w frontend daje oryginalne wyrażenie (spróbować samemu!):

screenshot

+0

Czy wiesz, jak szybko sformatować literę za pomocą Times New Roman Italic ("TI")? To, co robię, to wpisanie litery, a następnie przejście do czcionek i przełączenie jej. Ale kiedy patrzę na pełną formę, otrzymuję coś w rodzaju "StyleBox [\" L \ ", FontFamily -> \" Times \ ", FontSize-> 11, FontWeight -> \" Plain \ ", FontSlant -> \" Kursywa \ "]' zamiast skróconej wersji 'StyleBox [\" L \ ", \" TI \ "]'. Też miałem problemy z tym, kiedy próbuję utworzyć indeks, jak to opisano [tutaj] (http://www.dbaileyconsultancy.co.uk/m_documentation/m_documentation.html). – jmlopez

+1

@jmlopez Wybierz swój tekst, a następnie naciśnij Alt + 0 i wpisz "" TI "' w oknie dialogowym. Możesz też użyć pozycji menu "Format> Styl> Inne ...". –

+0

dzięki, to upraszcza proces formatowania. Wracając do oryginalnego przykładu: 'ActionMenu :: usage'. Jeśli spojrzysz na "? ActionMenu" na notebooku, zobaczysz sformatowaną wiadomość. Teraz, jeśli szukasz "Startu Action: 1" w centrum dokumentacji, zobaczysz tę samą wiadomość bez kursywy razy nowa rzymska. Czy to nie jest ten sam komunikat "ActionMenu :: usage"? Próbowałem zbudować mój indeks, ustawiając podsumowanie funkcji na 'functionName :: usage', ale zawsze kończyłem z' StyleBoxes' całym tym miejscem. Czy istnieje sposób na usunięcie formatowania z 'ActionMenu :: usage'? – jmlopez

Powiązane problemy