Crear un comando de prefijo sintáctico

Crear un comando de prefijo sintáctico

¿Cómo puedo crear un nuevo comando, cuya sintaxis probablemente sea el comando \sffamilyo ? \ttfamilyPor ejemplo:

{\mycommand xxxxx}

Información general: la opción font=de TikZ Node no permite comandos como \mycommand{}. Esto funciona bien:

\tikzstyle{JSToken} = [shape=rounded rectangle,font={\ttfamily}]

Pero esto no funciona

\tikzstyle{JSToken} = [shape=rounded rectangle,font={\texttt}]

Y necesito un comando \myfancyformatpara personalizar el formato de texto de una clase de nodos, para poder usarlo de esta forma:

{\myfancyformat Stupid Text needs Fancy Format}

Tiene la misma sintaxis que \sffamily:

{\sffamily Some Sans Serif formated Text}

Espero poder expresar mi idea.

Respuesta1

\fooSi se utiliza una secuencia de control {\foo something}, es casi seguro que se trata de una macro sin parámetros que normalmente se expande a un conjunto de configuraciones internas de registros TeX y/o selección de fuentes. TeX tiene registros internos, su valor influye en los algoritmos internos de TeX: ancho del párrafo, tamaño de salto de línea base, etc. El {inicio y }el final del grupo en este caso y la configuración de los registros o la selección de fuente es local en este grupo. Significa que los valores de los parámetros anteriores se restauran cuando finaliza el grupo, es decir, en }.

Si una secuencia de control \footiene uso \foo{something}, entonces es casi seguro que es una macro con un solo parámetro (definido por \def\foo#1{body}) y se expande hasta bodydonde su parámetro está formalmente marcado #1y puede ser utilizado por comandos de bodycualquier manera. Tenga en cuenta que {y }en el contexto \foo{something}no son grupos de inicio/fin en este caso, sino que son solo delimitadores de parámetros. Aquí juegan otro papel. TeX es un intérprete dependiente del contexto.

Si tiene una macro \foosin parámetro con el uso {\foo something}, entonces puede definir una nueva macro \newfoocon la sintaxis \newfoo{something}como esta:

\def\newfoo#1{{\foo #1}}

Tenga en cuenta que el primero {aquí abre el cuerpo de la macro (es parte de la regla de sintaxis cuando \defse usa la primitiva TeX) y el segundo {abre un grupo cuando \newfoose expande. Luego \fooestablece algunos parámetros TeX, luego #1se imprime un parámetro y luego el grupo se cierra debido al primer archivo }. El segundo }es parte de una regla de sintaxis de \defprimitivo.

A veces es posible el modo inverso: de \foo{something}sintaxis en {\newfoo something}sintaxis, pero es más complicado y tienes un inicio/fin de grupo más que si \foo{something}se usa puro:

\def\newfooA#1{\foo{#1}\egroup}
\def\newfoo{\expandafter\newfooA\expandafter{\iffalse}\fi}

Respuesta2

Parece tener la idea falsa de que la sintaxis de \ttfamilyincluye llaves. No es así, simplemente cambia la fuente en ese punto, al igual que \color{red}cambia el color en ese punto o \largecambia el tamaño de fuente en ese punto.

Así que no hay nada especial que debas hacer con la sintaxis: si defines

\newcommand\mycommand{\color{red}\large\ttfamily}

creará un gran monoespacio rojo con la sintaxis requerida.

información relacionada