我正在创建一个.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
以及产品的定义