我正在尝试定义一个命令,当使用某个参数调用时,它会“更新”另一个命令。具体来说,我尝试了以下方法(不起作用!)。
\newcommand{\gap} %initialise \gap to exist
\newcommand{\GAP}{1}{
\renewcommand{\gap}{\hspace{#1 em}} }
我的想法是\GAP{3}
重新定义\gap
为\hspace{3em}
,例如。
我查看了一些 TeX.SE 问题,特别是这个,但我不知道如何纠正这个问题......
#1
顺便说一句,删除和之间的空格em
不起作用,并且放置两个#
-s 输出 13(对于\GAP{3}
)。
这是完整的 MWE。
\documentclass[]{article}
\usepackage{amsmath,amssymb}
\newcommand{\gap}{} %initialise \gap to exist
\newcommand{\GAP}{1}{
\renewcommand{\gap}{\hspace{##1em}} }
\begin{document}
\GAP{3}
\end{document}
答案1
有三件事是错误的
的语法
\newcommand
要求参数的数量用方括号括起来:\newcommand{\GAP}[1]{...}
,而不是花括号\newcommand{\GAP}{1}{...}
的定义
\gap
,因为它不采用自己的参数,必须指定为#1
(即,在 的执行过程中进行评估\GAP
),而不是##1
(这意味着它是 的参数\gap
)的定义中存在一些杂散空格
\GAP
。
妇女权利委员会:
\documentclass[]{article}
\usepackage{amsmath,amssymb}
\newcommand{\gap}{} %initialise \gap to exist
\newcommand{\GAP}[1]{\renewcommand{\gap}{\hspace{#1em}}}
\begin{document}
a\gap b
\GAP{3}
a\gap b
\end{document}
答案2
参数的数量是可选参数(在括号中)\newcommand
。以下是更正后的示例:
\documentclass[]{article}
\usepackage{amsmath,amssymb}
\newcommand{\gap}{} %initialise \gap to exist
\newcommand{\GAP}[1]{%
\renewcommand{\gap}{\hspace{#1em}} }
\begin{document}
Text\gap Text\GAP{3}
Text\gap Text
\end{document}