情况是这样的:当我包含另一个文件时,我希望 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
。