将参数传递给嵌套的新命令

将参数传递给嵌套的新命令

我认为加倍哈希值足以将参数传递给嵌套的\newcommand

\newcommand{\notice}[1]{
  \vspace{10px}
  \textbf{#1:}
  \begin{quotation}
    ##1
  \end{quotation}}

\newcommand{\hint}[1]{
  \notice{Hint}
}

我在这里做错了什么? 上述操作产生以下错误:

“您不能在垂直模式下使用‘宏参数字符#’。”

答案1

\newcommand{\notice}[2]{
  \vspace{10px}
  \textbf{#1:}
  \begin{quotation}
    #2
  \end{quotation}}

\newcommand{\hint}[1]{%
  \notice{Hint}{#1}%
}

\def仅当您在 中某些内容时才需要双重哈希\def

答案2

你所做的就是将字符串放在#1引号内。这样的操作只有在以下情况下才有意义:定义另一个宏中的宏,并且你希望该宏引用其自己的第一个参数,而不是用#1外部宏的替换。例如,在:

\newcommand\macroia[1]{\renewcommand\macroii[1]{#1}}
\newcommand\macroib[1]{\renewcommand\macroii[1]{##1}}
\providecommand\macroii{}

调用的\macroia{xyz}结果是\macroii{#1} = xyz,即它忽略了自己的参数,只打印所\macroia看到的内容,而调用的\macroia{xyz}结果是\macroii{#1} = #1;即它忽略了参数\macroia,只回显扩展时传递的内容。

答案3

我在这里做了一些猜测。我相信您想要一些行宽较窄的文本排版的粗体标题。您需要的是一个新的环境,而不是一个新的命令:

\newenvironment{notice}[1]
  {\par\medskip\textbf{#1}\begin{quotation}}
  {\end{quotation}

这样你就可以输入类似

\begin{notice}{Hint}
This is a very useful hint for solving the problem.
\end{notice}

但结果并不理想。我会将标题放在文本中:

\newenvironment{notice}[1]
  {\begin{quotation}\noindent\textbf{#1}\\*\ignorespaces}
  {\end{quotation}}

(与之前语法相同)。还\hint应该是一个环境:

\newenvironment{hint}
  {\begin{notice}{Hint}}
  {\end{notice}}

不要随意使用空格(\vspace{10px}例如),但最重要的是用于px指定长度。这是一个没有固定值的单位,与 HTML 或 CSS 中的类似单位完全不同。

相关内容