如何将可选参数传递给命令?

如何将可选参数传递给命令?

我正在尝试编写自己的命令来包装该\VerbatimInput命令。我希望我的命令采用可选参数(在 中给出的参数[...])并将它们直接传递给\VerbatimInput[...]。当然,如果没有给出我的命令的可选参数,则不应将任何内容传递给\VerbatimInput

我该怎么做?我是在 LaTeX 中创建自定义命令的新手。

答案1

如果宏参数应该是一组键值对,利用标准包来达到目的(keyvalxkeyval以及其他),将空列表传递给它通常是无害的。

所以

\newcommand{\foo}[2][]{%
  <actions to be performed before>%
  \VerbatimInput[#1]{#2}%
  <actions to be performed after>%
}

就是你要找的方法,因为fancyvrb 使用keyval

答案2

egreg 提供了最简单的方法\newcommand{\foo}[2][]{\VerbatimInput[#1]{#2}},这里是xparse使用的方法\NewDocumentCommand,并检查\IfValueTF{#1}是否给出了可选的(o)参数。

如果需要更多可选参数,使用肯定更容易\NewDocumentCommand

\documentclass{article}

\usepackage{xparse}
\usepackage{fancyvrb}

\begin{filecontents}{helloworldexample.c}
 #include<stdio.h>

int main(int argc,char **argv)
{
  printf("Hello World!\n");
  return(0);
}
\end{filecontents}
\NewDocumentCommand{\myverb}{om}{%
  \IfValueTF{#1}{%
    \VerbatimInput[{#1}]{#2}%
  }{%
    \VerbatimInput{#2}%
  }%
}

\begin{document}
\myverb{helloworldexample.c}

\myverb[frame=single,numbers=left]{helloworldexample.c}
\end{document}

相关内容