使用 EnsureMath 和括号更新命令

使用 EnsureMath 和括号更新命令

我正在创建一个.sty名为的文件(位于my-macros.sty我的主目录中/texmf),其中定义了一些我经常使用的命令。这些命令包括以下内容

\newcommand{\apol}{}
\newcommand{\DEFapol}[2][X,Y]{\renewcommand{\apol}[1][#1]%
    {\ensuremath{#2[##1]}}}
\newcommand{\fq}[1][q]{\ensuremath{\mathbb{F}_{#1}}}

apol 命令用于给出域上的多项式环。但是,一旦我在文本中反复更改变量(从 X 到 X、Y 到 X、Y、Z)和域(从 K 到有理数再到有限域),我就会定义变量DEFapol(的第一个参数DEFapol)和域(第二个参数)。请注意,具有 q 个元素的有限域由另一个命令给出\fq。还请注意,我希望 X、Y 成为我的多项式环的默认变量。

当我在以下 MWE 中测试这些命令时

\documentclass{article}

\usepackage{amsmath,amssymb,amsfonts,amsthm}
\usepackage{my-macros}

\begin{document}

\DEFapol[X]{K}

$\apol$

\DEFapol{K}

$\apol$

\DEFapol[X,Y,Z]{\fq}

$\apol$

\end{document}

前两个 $\apol$ 表达式是我想要的,但最后一个不是:该\fq命令以 [X,Y,Z] 作为参数,因此结果是以下表达式 $\mathbb{F}_{[X,Y,Z]}$。但我真正想要的是 $\mathbb{F}_q[X,Y,Z]$。一个解决方案是简单地输入

\DEFapol[X,Y,Z]{\fq[q]}

所以我的问题是:有没有另一种方法来处理命令定义中的括号,以便当我输入

\DEF[X,Y,Z]{\fq}

我得到了想要的结果,即\fq忽略 [X,Y,Z] 作为其参数?

答案1

我只是{}\DEFapol宏中添加了

...\ensuremath{#2{}[##1]}...

以下是 MWE:

\documentclass{article}

\usepackage{amsmath,amssymb,amsfonts,amsthm}

\newcommand{\apol}{}
\newcommand{\DEFapol}[2][X,Y]{\renewcommand{\apol}[1][#1]%
    {\ensuremath{#2{}[##1]}}}
\newcommand{\fq}[1][q]{\ensuremath{\mathbb{F}_{#1}}}

\begin{document}

\DEFapol[X]{K}

$\apol$

\DEFapol{K}

$\apol$

\DEFapol[X,Y,Z]{\fq}

$\apol$

\end{document}

在此处输入图片描述

答案2

撇开\ensuremath那些看起来没有必要(而且很少有必要)的事情不谈,以下是\DEFapol[X,Y,Z]{\fq}

\renewcommand{\apol}[1][X,Y,Z]{\fq[#1]}

当你现在打电话时\apol,你会得到

\fq[X,Y,Z]

\fq以及产品的定义

相关内容