Erstellen eines syntaktischen Präfixbefehls

Erstellen eines syntaktischen Präfixbefehls

Wie kann ich einen neuen Befehl erstellen, dessen Syntax wahrscheinlich dem Befehl \sffamilyoder entspricht \ttfamily? Zum Beispiel:

{\mycommand xxxxx}

Hintergrundinformation: Die Option font=von TikZ Node erlaubt keine Befehle wie \mycommand{}. Dies funktioniert einwandfrei:

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

Aber das funktioniert nicht

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

Und ich brauche einen Befehl \myfancyformatzum Anpassen des Textformats einer Knotenklasse, sodass ich es in dieser Form verwenden kann:

{\myfancyformat Stupid Text needs Fancy Format}

Es hat die gleiche Syntax wie \sffamily:

{\sffamily Some Sans Serif formated Text}

Ich hoffe, ich kann meine Idee ausdrücken.

Antwort1

Wenn eine Steuersequenz \fooverwendet wird {\foo something}, handelt es sich mit ziemlicher Sicherheit um ein Makro ohne Parameter, das normalerweise zu einer Reihe interner Einstellungen von TeX-Registern und/oder der Schriftartauswahl erweitert wird. TeX verfügt über interne Register, deren Werte interne TeX-Algorithmen beeinflussen: Absatzbreite, Grundliniensprunggröße usw. In diesem Fall {ist dies Gruppenanfang und }Gruppenende und die Einstellungen der Register oder der Schriftartauswahl sind lokal in dieser Gruppe. Dies bedeutet, dass die vorherigen Parameterwerte wiederhergestellt werden, wenn die Gruppe endet, also bei }.

Wenn eine Steuersequenz \fooverwendet wird \foo{something}, handelt es sich mit ziemlicher Sicherheit um ein Makro mit einem einzigen Parameter (definiert durch \def\foo#1{body}), das sich bis zu dem Punkt erweitert, bodyan dem sein Parameter formal als gekennzeichnet ist und von Befehlen in beliebiger Weise #1verwendet werden kann . Beachten Sie, dass die und im Kontext in diesem Fall keine Anfangs-/Endgruppen sind, sondern nur Parametertrennzeichen. Sie spielen hier eine andere Rolle. TeX ist ein kontextabhängiger Interpreter.body{}\foo{something}

Wenn Sie ein Makro \fooohne Parameter mit der Verwendung haben {\foo something}, können Sie ein neues Makro \newfoomit der Syntax \newfoo{something}wie folgt definieren:

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

Beachten Sie, dass das erste {hier den Hauptteil des Makros öffnet (es ist Teil der Syntaxregel, wenn \defdas TeX-Grundelement verwendet wird) und das zweite {eine Gruppe öffnet, wenn \newfooerweitert wird. Dann \foowerden einige TeX-Parameter festgelegt, dann wird ein Parameter #1gedruckt und dann wird die Gruppe aufgrund des ersten geschlossen }. Das zweite }ist Teil einer Syntaxregel des \defGrundelements.

Der umgekehrte Weg: von \foo{something}Syntax zu {\newfoo something}Syntax ist manchmal möglich, aber es ist schwieriger und Sie haben eine Gruppe mehr, begin/end, als wenn pure \foo{something}verwendet wird:

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

Antwort2

Sie scheinen die falsche Vorstellung zu haben, dass die Syntax \ttfamilyKlammern enthält. Das ist nicht der Fall, sie ändert einfach die Schriftart an dieser Stelle, genauso wie \color{red}sie die Farbe an dieser Stelle ändert oder \largedie Schriftgröße an dieser Stelle ändert.

Sie müssen also nichts Besonderes an der Syntax ändern: Wenn Sie

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

Es wird eine große rote Monospace-Schrift mit der erforderlichen Syntax erstellt.

verwandte Informationen