命令定义嵌套命令

命令定义嵌套命令

我正在尝试定义一个命令,当使用某个参数调用时,它会“更新”另一个命令。具体来说,我尝试了以下方法(不起作用!)。

\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

有三件事是错误的

  1. 的语法\newcommand要求参数的数量用方括号括起来:\newcommand{\GAP}[1]{...},而不是花括号\newcommand{\GAP}{1}{...}

  2. 的定义\gap,因为它不采用自己的参数,必须指定为#1(即,在 的执行过程中进行评估\GAP),而不是##1(这意味着它是 的参数\gap

  3. 的定义中存在一些杂散空格\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}

相关内容