我遇到了以下代码的错误Illegal parameter number in definition of \setuplateloadedpackages.
。它似乎newcommand
无法识别传递给它的“宏参数”crefformat
不是它自己的,而是稍后由 cleveref 替换的占位符。我也尝试过\setuplateloadedpackages
使用\def
和进行定义\let
,但无济于事。
\newcommand*{\setuplateloadedpackages}{
% Configure styles for references.
\crefformat{section}{\S#2#1#3}
\crefformat{subsection}{\S#2#1#3}
\crefformat{subsubsection}{\S#2#1#3}
\crefrangeformat{section}{\S\S#3#1#4 to~#5#2#6}
\crefmultiformat{section}{\S\S#2#1#3}{ and~#2#1#3}{, #2#1#3}{ and~#2#1#3}
}
答案1
就这个问题而言,其工作原理非常\crefformat{<counter>}{<code>}
相似\def<macroname>{<code>}
:,,#1
就像普通的宏参数一样工作。#2
#3
为了让 TeX 在嵌套宏定义时正确地选择参数所属的宏,你需要将#s
每个嵌套级别的 加倍,如中所述参数中的双井号(数字符号,哈希字符)##1 是什么意思?。
因为你必须说
\newcommand*{\setuplateloadedpackages}{%
\newcommand*{\myfoo}[1]{Aha! ##1!}%
}
为了使 LaTeX\setuplateloadedpackages
正确地定义\myfoo
为采用单个参数并生成的宏Aha! <argument>!
,您还必须说
\newcommand*{\setuplateloadedpackages}{%
% Configure styles for references.
\crefformat{section}{\S##2##1##3}%
\crefformat{subsection}{\S##2##1##3}%
\crefformat{subsubsection}{\S##2##1##3}%
\crefrangeformat{section}{\S\S##3##1##4 to~##5##2##6}%
\crefmultiformat{section}{\S\S##2##1##3}{ and~##2##1##3}{, ##2##1##3}{ and~##2##1##3}%
}