如何定义带有可选参数的文件输入命令?

如何定义带有可选参数的文件输入命令?

情况是这样的:当我包含另一个文件时,我希望 Latex 读取一些命令,为此我定义了一个\include这样的新命令:

\newcommand{\foo}[1]{}

\newcommand{\includeas}[2][]{%
   \foo{#1}
   \include{#2}}

它的效果超出了所有人的预期!但现在我希望仍然能够通过我的新\includeas命令使用 RefTeX 的 toc 浏览器。

问题如下:(摘自 RefTeX 手册)

用户选项:reftex-include-file-commands

输入另一个文件的 LaTeX 命令列表。文件名应位于命令后面,可以用括号括起来或用空格分隔。

如您所见,宏后的方括号中有一个可选参数对于 RefTeX 来说是一个问题。

有什么方法可以绕过它吗?

目前,我有一个快速解决方法,即将可选的 #1 参数转变为强制的 #2,但这依赖于我实际上一直提供参数的事实,而情况并非总是如此。

梅威瑟:

文件 main.tex

\documentclass{minimal}

\begin{document} 

\includeas[blabla]{foo} 
 % The test is to press C-C = , not to try to compile!

\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:

文件 foo.tex:

\chapter{Name}
\label{cha:name}

答案1

您可以在命令的另一侧使参数成为可选的:

\makeatletter
\def\includeas#1{
    \@ifnextchar[{\includeas@opt{#1}}{\includeas@{#1}}
}
\def\includeas@#1{ 
    \include{#1}
}
\def\includeas@opt#1[#2]{
    \foo{#2}
    \include{#1}
}
\makeatother

然后你可以这样调用它:

Without optional
\includeas{filename.tex}
With optional
\includeas{filename.tex}[foo]

[然而,在使用命令后,你不应该用 来开始一个常规句子\includeas

相关内容