
也許有人可以告訴我如何在 \LaTeX 中定義一個新命令,它可以採用一個強制值和另一個可選值(參數)作為輸入。在這種情況下,根據可選參數的值,輸出物件的類型應該會改變。
具體來說,就我而言,我需要指定一個命令\dependSet(<arg>, <opt par>)
來繪製括號。在這種情況下,根據可選參數的存在/不存在應該改變輸出(內部存在/不存在垂直線):
因此,為了可用性,參數位於命令的參數之後非常重要,並且使用大括號而不是方括號來選擇它。
附:實際上,遺憾的是 LaTex 使用了一種相當不舒服的表示法(有點像 ALGOL 60 之類的東西)並且沒有做任何事情來使以類似 Python 的風格定義新命令成為可能。
答案1
假設您不想輸入(x,y)
或(x,y\mid a)
出於某種原因。並且有充分的理由不這樣做:例如,您可能想要或被要求更改符號。硬連線輸入會使任務變得非常困難。
這個想法是輸入
\dependSet{x,y}
\dependSet{x,y|a}
但不影響最終輸出。輸入非常自然,避免了過多括號帶來的併發症。
我們該怎麼做呢?我們可以使用\NewDocumentCommand
它的\SplitArgument
功能。
\documentclass{article}
%\usepackage{xparse} % uncomment for older versions of LaTeX
\NewDocumentCommand{\dependSet}{>{\SplitArgument{1}{|}}m}{%
\dependSetAux#1%
}
\NewDocumentCommand{\dependSetAux}{mm}{%
\IfNoValueTF{#2}{% no | found
(#1)%
}{% found |
(#1\mid #2)%
}%
}
\begin{document}
$\dependSet{x}+\dependSet{x,y}+\dependSet{x,y|a}$
\end{document}
評論。
該命令\dependSet
將其參數\dependSetAux
作為兩個括號組傳遞。如果|
初始參數中沒有,則第二個支撐組將{-NoValue-}
可以進行測試,如圖所示。
如果您想變更最終格式,請按 操作\dependSetAux
。
可能更有效但不太簡單的程式碼是
\NewDocumentCommand{\dependSetAux}{mm}{%
(#1\IfValueT{#2}{\mid #2})%
}