我正在尝试编写自己的命令来包装该\VerbatimInput
命令。我希望我的命令采用可选参数(在 中给出的参数[...]
)并将它们直接传递给\VerbatimInput[...]
。当然,如果没有给出我的命令的可选参数,则不应将任何内容传递给\VerbatimInput
。
我该怎么做?我是在 LaTeX 中创建自定义命令的新手。
答案1
如果宏参数应该是一组键值对,利用标准包来达到目的(keyval
,xkeyval
以及其他),将空列表传递给它通常是无害的。
所以
\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}