
Как создать новую команду, синтаксис которой, скорее всего, будет командой \sffamily
or \ttfamily
. Например:
{\mycommand xxxxx}
Справочная информация: опция font=
TikZ Node не допускает такие команды, как \mycommand{}
. Это работает нормально:
\tikzstyle{JSToken} = [shape=rounded rectangle,font={\ttfamily}]
Но это не работает.
\tikzstyle{JSToken} = [shape=rounded rectangle,font={\texttt}]
И мне нужна команда \myfancyformat
для настройки текстового формата класса узлов, чтобы я мог использовать его в таком виде:
{\myfancyformat Stupid Text needs Fancy Format}
Синтаксис тот же, что и у \sffamily
:
{\sffamily Some Sans Serif formated Text}
Надеюсь, мне удастся выразить свою идею.
решение1
Если последовательность управления \foo
имеет использование {\foo something}
, то это почти наверняка макрос без параметров, который обычно расширяется до набора внутренних настроек регистров TeX и/или выбора шрифта. TeX имеет внутренние регистры, их значение влияет на внутренние алгоритмы TeX: ширину абзаца, размер базовой линии и т. д. В этом случае {
начало группы is и }
конец группы is, а настройки регистров или выбора шрифта являются локальными в этой группе. Это означает, что предыдущие значения параметров восстанавливаются, когда группа заканчивается, т. е. в }
.
Если последовательность управления \foo
имеет использование \foo{something}
, то это почти наверняка макрос с одним параметром (определяется с помощью \def\foo#1{body}
), и он расширяется до body
того места, где его параметр формально обозначен как , #1
и он может использоваться командами в body
любом случае. Обратите внимание, что {
и }
в контексте \foo{something}
не являются начальной/конечной группой в этом случае, а являются лишь разделителями параметров. Здесь они играют другую роль. TeX — контекстно-зависимый интерпретатор.
Если у вас есть макрос \foo
без параметров с использованием {\foo something}
, то вы можете определить новый макрос с таким \newfoo
синтаксисом :\newfoo{something}
\def\newfoo#1{{\foo #1}}
Обратите внимание, что первый {
здесь открывает тело макроса (это часть синтаксического правила при \def
использовании примитива TeX), а второй {
открывает группу при \newfoo
расширении. Затем \foo
устанавливает некоторые параметры TeX, затем параметр #1
печатается, а затем группа закрывается из-за первого }
. Второй }
является частью синтаксического правила \def
примитива.
Обратный путь: от \foo{something}
синтаксиса к {\newfoo something}
синтаксису иногда возможен, но это сложнее, и у вас будет на одну группу begin/end больше, чем при \foo{something}
использовании pure:
\def\newfooA#1{\foo{#1}\egroup}
\def\newfoo{\expandafter\newfooA\expandafter{\iffalse}\fi}
решение2
У вас, похоже, ложное представление, что синтаксис \ttfamily
включает фигурные скобки. Это не так, он просто меняет шрифт в этой точке, так же как \color{red}
меняет цвет в этой точке или \large
меняет размер шрифта в этой точке.
Поэтому вам не нужно ничего особенного делать с синтаксисом: если вы определяете
\newcommand\mycommand{\color{red}\large\ttfamily}
он создаст большой красный моноширинный шрифт с требуемым синтаксисом.