建立語法前綴命令

建立語法前綴命令

如何建立一個新指令,其語法可能是\sffamilyor\ttfamily命令。例如:

{\mycommand xxxxx}

背景資訊:TikZ Node 的選項font=不允許諸如\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 演算法:段落寬度、基線跳過大小{}。這意味著當組結束時,即在 時,將恢復先前的參數值}

如果一個控制序列\foo有用途\foo{something},那麼它幾乎肯定是一個帶有單一參數的巨集(由 定義\def\foo#1{body}),並且它擴展到body其參數被正式標記為的位置,#1並且可以由命令以body任何方式使用。請注意,在這種情況下,上下文中的{和不是開始/結束組,但它們只是參數分隔符號。他們在這裡扮演著另一個角色。 TeX 是上下文相關的解釋器。}\foo{something}

如果您有一個不帶參數的宏,\foo並且使用 use {\foo something},那麼您可以使用以下\newfoo語法定義一個新宏:\newfoo{something}

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

請注意,這裡第一個開啟巨集的主體(使用 TeX 原語{時它是語法規則的一部分),第二個在展開時開啟一個群組。然後設定一些 TeX 參數,然後列印一個參數,然後由於第一個.第二個是原語語法規則的一部分。\def{\newfoo\foo#1}}\def

相反的方式:從\foo{something}語法到語法有時是可能的,但它更棘手,並且與使用{\newfoo something}pure 相比,您多了一組開始/結束:\foo{something}

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

答案2

您似乎有一個錯誤的想法,即 的語法\ttfamily包含大括號。它不會,它只是更改該點的字體,就像\color{red}更改該點的顏色或\large更改該點的字體大小一樣。

所以對於語法你不需要做任何特別的事情:如果你定義

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

它將使用所需的語法製作大型紅色等寬字體。

相關內容