Crie um comando de prefixo sintático

Crie um comando de prefixo sintático

Como posso criar um novo comando, cuja sintaxe é provavelmente o comando \sffamilyou \ttfamily. Por exemplo:

{\mycommand xxxxx}

Informações básicas: a opção font=do nó TikZ não permite comandos como \mycommand{}. Isso funciona bem:

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

Mas isso não funciona

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

E preciso de um comando \myfancyformatpara customizar o formato de texto de uma classe de nós, para que eu possa utilizá-lo desta forma:

{\myfancyformat Stupid Text needs Fancy Format}

Tem a mesma sintaxe de \sffamily:

{\sffamily Some Sans Serif formated Text}

Espero poder expressar minha ideia.

Responder1

Se uma sequência de controle \footiver uso {\foo something}, então é quase certo que seja uma macro sem parâmetro que normalmente se expande para um conjunto de configurações internas de registros TeX e/ou seleção de fonte. TeX possui registros internos, seu valor influencia algoritmos internos do TeX: largura do parágrafo, tamanho do salto de linha de base, etc. O {início do grupo e }o fim do grupo neste caso e as configurações dos registros ou seleção de fonte são locais neste grupo. Isso significa que os valores dos parâmetros anteriores são restaurados quando o grupo termina, ou seja, em }.

Se uma sequência de controle \footiver uso \foo{something}, então é quase certamente uma macro com um único parâmetro (definido por \def\foo#1{body}) e se expande para bodyonde seu parâmetro é formalmente marcado como #1e pode ser usado por comandos de bodyqualquer forma. Observe que {e }no contexto \foo{something}não são grupos de início/fim neste caso, mas são apenas delimitadores de parâmetros. Eles desempenham outro papel aqui. TeX é um intérprete dependente do contexto.

Se você tiver uma macro \foosem parâmetro com o uso {\foo something}, poderá definir uma nova macro \newfoocom a sintaxe \newfoo{something}como esta:

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

Observe que o primeiro {aqui abre o corpo da macro (faz parte da regra de sintaxe quando \defo primitivo TeX é usado) e o segundo {abre um grupo quando \newfooé expandido. Em seguida, \foodefine alguns parâmetros do TeX, então um parâmetro #1é impresso e então o grupo é fechado devido ao primeiro }. A segunda }faz parte de uma regra de sintaxe \defprimitiva.

O caminho inverso: de \foo{something}sintaxe para {\newfoo something}sintaxe às vezes é possível, mas é mais complicado e você tem mais um início/fim de grupo do que se puro \foo{something}fosse usado:

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

Responder2

Você parece ter a falsa ideia de que a sintaxe \ttfamilyinclui colchetes. Isso não acontece, simplesmente altera a fonte naquele ponto, assim como \color{red}altera a cor naquele ponto ou \largealtera o tamanho da fonte naquele ponto.

Portanto, não há nada de especial que você precise fazer em relação à sintaxe: se você definir

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

ele criará um grande monoespaço vermelho com a sintaxe necessária.

informação relacionada