重新定义命令(包括其参数)以不执行任何操作

重新定义命令(包括其参数)以不执行任何操作

我想轻松地排版我的文档,但不包含所有参考资料(原因是我需要一个没有脚注的文档版本来计算没有脚注的字数)。我使用 biblatex 创建脚注。所以我在序言中加入了以下几行,这些行在常规使用时被注释掉,但当我想要没有脚注的文档时就不会被注释掉。

\def\autocite(#1)(#2)(#3){}
\def\autocites(#1)(#2)(#3){}
\providecommand{\pno}{\relax}
\providecommand{\psqq}{\relax}

问题涉及前两行。由于\autocite(s)需要参数,我根据答案重新定义了它这里。但这会导致每次引用都出现以下错误:

\autocites 的使用与其定义不符。

答案1

如果你定义这样的宏:

\def\autocite(#1)(#2)(#3){}

必须后面跟着(等。它们不是可选的。此技术在链接答案中有效,因为括号不是可选的。

如果要替换这些宏,则需要使用相同的可选参数和强制参数来定义它们。该\autocites宏似乎有很多可能的可选参数!您可以使用该xparse包轻松定义这样的宏。

答案2

坦白说,我不知道如何做宏。所以,这就是我想到的方法。我\autocite按照 Martin 的建议,使用xparse包重新定义了。谢谢你的指点!然后,使用\DeclareMultiCiteCommandBibLatex 内置的,我映射\autocites到了\autocite。代码如下:

\usepackage{xparse}
\DeclareDocumentCommand\autocite{oom}{}
\DeclareMultiCiteCommand{\footcites}[\autocite]{\relax}{}
\let\pno\relax
\let\psqq\relax

请注意,需要\footcites用您用于引用的内容替换。所以现在我可以打开和关闭引用/脚注。

答案3

命令以另一种语法定义和使用,例如:

\autocite[ prenote ][ postnote ]{ key }

你必须重新定义这个。

相关内容