我认为加倍哈希值足以将参数传递给嵌套的\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 中的类似单位完全不同。