Gracias a los enlaces de Mr.Wizard, he encontrado el único ejemplo en la documentación sobre cómo analizar nuevos operadores (la gplus example in Low-Level Input). De acuerdo con este ejemplo, aquí está mi versión para el nuevo operador PerArrow
.Por favor comente/critize en el código de abajo:
In[1]:= PerArrow /: MakeBoxes[PerArrow[x_, y_], StandardForm] :=
RowBox[{MakeBoxes[x, StandardForm],
RowBox[{AdjustmentBox["/", BoxMargins -> -.2],
AdjustmentBox["\[DoubleLongRightArrow]", BoxMargins -> -.1]}],
MakeBoxes[y, StandardForm]}];
MakeExpression[
RowBox[{x_, "/", RowBox[{"\[DoubleLongRightArrow]", y_}]}],
StandardForm] :=
MakeExpression[RowBox[{"PerArrow", "[", x, ",", y, "]"}],
StandardForm];
In[3]:= PerArrow[x, y]
Out[3]= x /\[DoubleLongRightArrow] y
In[4]:= x /\[DoubleLongRightArrow]y
Out[4]= x /\[DoubleLongRightArrow] y
In[5]:= FullForm[x /\[DoubleLongRightArrow]y]
Out[5]//FullForm= \!\(\*
TagBox[
StyleBox[
RowBox[{"PerArrow", "[",
RowBox[{"x", ",", "y"}], "]"}],
ShowSpecialCharacters->False,
ShowStringCharacters->True,
NumberMarks->True],
FullForm]\)
En aras de la claridad, aquí es una captura de pantalla, así: 
Dado que el operador no está totalmente integrado, además se refiere son:
- el operador se selecciona raro cuando se hace clic (
DoubleLongRightArrow
con y en lugar de con /).
- en consecuencia, la parte de análisis requiere el
DoubleLongRightArrow
ser RowBox
-ed con y, de lo contrario produce error de sintaxis
- coloración de sintaxis (en
In[4]
y In[5]
)
- imprime raro si introduce directamente (notar la gran lagunas en
In[4]
y In[5]
)
Ahora, puedo vivir con estos, sin embargo sería bueno tener algún medio para limar todas las cuestiones de menor importancia. Supongo que todo esto se reduce básicamente a un manejador de sintaxis incluso de nivel inferior, que ahora no sabe cómo agrupar al nuevo operador. ¿Alguna idea sobre cómo abordar estos? Entiendo que Cell
tiene una multitud de opciones que pueden ser útiles (como CellEvaluationFunction
, ShowAutoStyles
y InputAutoReplacements
) aunque ahora no tengo ni idea.
En otras palabras, ¿le gustaría que esto funcione en un kernel independiente, es decir, sin front-end? En este caso, es posible que desee escribir su propio '$ SyntaxHandler', que tomaría una cadena que Mathematica considera que tiene un error de sintaxis. Aunque esto podría ser complicado. – Sasha
¡Hola Istvan! No puedo ayudar con esto, pero déjame darte la bienvenida a StackOverflow. Espero que alguien más aquí tenga una buena respuesta. –
Hola, István, bienvenido a StackOverflow! Un mensaje de bienvenida útil que tomo prestado de belisarius: Permítame darle la bienvenida a StackOverflow y recordarle tres cosas que solemos hacer aquí: 1) A medida que reciba ayuda, trate de responder preguntas también en su área de especialización 2) Lea las preguntas frecuentes 3) Cuando veas buenas preguntas y respuestas, vuélvelas usando los triángulos grises, ya que la credibilidad del sistema se basa en la reputación que obtienen los usuarios al compartir sus conocimientos. Recuerde también aceptar la respuesta que resuelva mejor su problema, si lo hubiera, presionando el signo de marca de verificación –