对宏的参数进行案例分析

对宏的参数进行案例分析

背景:正如这里所讨论的,似乎没有广泛接受的逻辑量词印刷标准。为了解决这个问题,我在论文中定义了以下宏:

\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}

在此处输入图片描述

相关内容