2011-06-21 5 views
6

Uso Messages de las funciones incorporadas tienen formato incrustado en línea. Por ejemplo:Manera conveniente de agregar formato en línea al uso Mensajes

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

Uno puede ver que este formato en línea se basa en el conjunto de estilos definidos en "Estilos para Inline Formato" sección de la hoja de estilo Core.nb. Pero no he encontrado ninguna documentación para estos estilos, así como tampoco ninguna descripción del algoritmo conveniente para agregar formato a usageMessage s.

Cuál es la manera conveniente de añadir en línea formato a definidos por el usuario usageMessage s en Mathematica ? ¿Cuáles son las reglas de uso de los estilos predeterminados para el formato en línea definido en la hoja de estilos Core.nb? Me gustaría añadir en línea formato a los usageMessage s en mi paquete acaba con Mathematica , sin necesidad de instalar componentes adicionales como el Banco de trabajo, etc.

P. S. La sintaxis del formato incrustado en línea en String s está parcialmente documentada en la página de tutorial "String Representation of Boxes". Pregunta relacionada en el grupo de noticias oficial sobre esta sintaxis: "(any documentation for) linear syntax?" La visualización de tales cadenas en el FrontEnd está controlada por la opción ShowStringCharacters->False de Cell.

+0

relacionados http://www.mathematicahelp.info/minor-progress-with- 6-0-documentation –

+5

No publico esto como respuesta porque usted ignoró explícitamente el WorkBench. Pero creo que buscas algo como esta paleta http://reference.wolfram.com/workbench/index.jsp?topic=/com.wolfram.eclipse.help/html/reference/DocumentationTools/tutorial/AuthoringSymbolPagesUsingDocumentationTools.html –

Respuesta

1

Uno de los problemas al manejar cadenas de este tipo es que la mayoría de las operaciones con cadenas en Mathematica reemplazan automáticamente la barra invertida (\) con la barra invertida escapada (\\).

Si intenta esto:

enter image description here

usted puede pensar que tiene la cadena que está buscando (menos el \! para que sea una expresión), pero en realidad es: "\\(x\\_\\(1, 2\\) \[Equal] \\(\\(-b\\) \[PlusMinus] \\@\\(b\\^2 -\\(4\\ a\\ c\\)\\)\\)\\/\\(2\\ a\\)\\)"

Mi solución está lejos de ser elegante, pero funciona.

  1. Generar cajas de su expresión con formato: enter image description here
  2. seleccionar la salida e ir al elemento de menú Cell > Convert to > InputForm. Resultado: enter image description here
  3. Ahora puede editar la cadena, poniendo \! delante de ella y cotizaciones alrededor de él: "\!\(x \_ \(1, 2\) == \(\(-b\) \[PlusMinus] \@\(b \^2 - \(4\ a\ c\)\)\) \/ \(2\ a\)\)"

Si se realiza el paso 3 en un editor externo, deje fuera de las comillas y sólo tienen \! al frente y pegue el resultado en MMA, se convierte directamente en la expresión formateada

+0

+ 1. No sabía que 'InputForm' de cuadros es una forma lineal. Ver mi respuesta para observaciones adicionales. –

1

Creo que la manera más fácil es simplemente usar el Front End para formatear la cadena. Si está escribiendo un paquete, puede usar "guardar automáticamente paquetes" (es decir, cuando el contenido de las celdas de inicialización de un cuaderno se convierta en el paquete). Si utiliza un editor de texto para escribir el paquete, puede ser demasiado problema usar el formato ...

1

Esta respuesta es una adición a la respuesta de Sjoerd.

Antes que nada, no tenemos que usar el comando FrontEnd Cell > Convert to > InputForm para obtener la forma lineal de cuadros. Podemos conseguirlo simplemente aplicando InputForm a la salida del 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\)\) 

En segundo lugar, podemos exportar la composición tipográfica última representación de cadena en la línea de cajas por las dos maneras siguientes con resultado equivalente (la única diferencia es que Put envuelve el texto):

[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"] 

En ambos casos se obtiene un archivo con una línea: \!\(x\_\(1, 2\) == \(\(-b\) ± \@\(b\^2 - \(4\ a\ c\)\)\)\/\(2\ a\)\).

Inserción de esta línea en un cuaderno en el frontend da la expresión original (probar por su cuenta!):

screenshot

+0

¿sabrá cómo formatear rápidamente una letra usando Times New Roman Italic ("TI")? Lo que hago es escribir la letra, luego ir a las fuentes y cambiarlo. Pero cuando miro el formulario completo obtengo algo como 'StyleBox [\" L \ ", FontFamily -> \" Times \ ", FontSize-> 11, FontWeight -> \" Simple \ ", FontSlant -> \" Cursiva \ "]' en lugar de la versión en corto 'StyleBox [\" L \ ", \" TI \ "]'. También he tenido problemas con esto cuando trato de crear un índice como se describe [aquí] (http://www.dbaileyconsultancy.co.uk/m_documentation/m_documentation.html). – jmlopez

+1

@jmlopez Seleccione su texto, luego presione Alt + 0 e ingrese '" TI "' en el cuadro de diálogo. Alternativamente, use la opción de menú 'Formato> Estilo> Otro ...'. –

+0

gracias, esto simplifica el proceso de formateo. Volviendo al ejemplo original: 'ActionMenu :: usage'. Si miras '? ActionMenu' en un cuaderno, verás un mensaje formateado. Ahora, si busca 'ActionMenu start: 1' en el centro de documentación, verá el mismo mensaje sin la cursiva de la nueva roman. ¿No es el mismo mensaje 'ActionMenu :: usage'? He intentado construir mi índice estableciendo el resumen de una función en 'functionName :: usage' pero siempre termino con' StyleBoxes' en todo el lugar. ¿Hay alguna forma de eliminar el formato de 'ActionMenu :: usage'? – jmlopez

Cuestiones relacionadas