背景:正如这里所讨论的,似乎没有广泛接受的逻辑量词印刷标准。为了解决这个问题,我在论文中定义了以下宏:
\newcommand{\zenbu}[1]{\mathop{\forall#1}}
这样我以后就可以更改量词的排版惯例。我使用宏,例如,\zenbu{\tilde {x_0}}Rxx
或\zenbu{x \in X}Px
。
现在我喜欢前一个例子的输出,但我正在考虑改变后一个例子的输出,即我在参数中放置关系符号来排版受限域上量化的简写的情况。
问题:通过在宏定义中根据宏参数的内容进行分支,是否可以轻松做到这一点?我在论文中使用的相关关系符号是\in
\sqsubseteq
和\sqsupseteq
,来自 AMSLaTeX。
答案1
expl3
您可以使用and进行案例分支xparse
:
\documentclass{article}
\usepackage{amsmath,amssymb,xparse}
\ExplSyntaxOn
\NewDocumentCommand{\zenbu}{m}
{
\pteromys_zenbu:n { #1 }
}
\cs_new_protected:Nn \pteromys_zenbu_in:n
{
(\,\forall #1)
}
\cs_new_protected:Nn \pteromys_zenbu_sqsubseteq:n
{
[\,\forall #1]
}
\cs_new_protected:Nn \pteromys_zenbu_sqsupseteq:n
{
[\,\forall #1]
}
\cs_new_protected:Nn \pteromys_zenbu_generic:n
{
\mathop{\forall #1}
}
\cs_new_protected:Nn \pteromys_zenbu:n
{
\tl_if_in:nnTF { #1 } { \in }
{
\pteromys_zenbu_in:n { #1 }
}
{
\tl_if_in:nnTF { #1 } { \sqsubseteq }
{
\pteromys_zenbu_sqsubseteq:n { #1 }
}
{
\tl_if_in:nnTF { #1 } { \sqsupseteq }
{
\pteromys_zenbu_sqsupseteq:n { #1 }
}
{
\pteromys_zenbu_generic:n { #1 }
}
}
}
}
\ExplSyntaxOff
\begin{document}
$\zenbu{x}Px$
$\zenbu{\tilde{x}_0}Rxx$
$\zenbu{x\in X}Px$
$\zenbu{x\sqsubseteq y}Pxy$
$\zenbu{x\sqsupseteq y}Pxy$
\end{document}