我创建了一些带有参数的新命令。我的几个命令都带有相同的(冗长的)参数。因此,我将这些参数放在一个单独的文件中。但我似乎无法输入或导入这些参数。
主要.tex:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\myfirsttask}{m m m g}{
#1 #2 #3
% do stuff
\IfNoValueF{#4}{%
#4
% do stuff
}
}
\NewDocumentCommand{\mysecondtask}{m m m g}{
#1 #2 #3
% do stuff
\IfNoValueF{#4}{%
#4
% do stuff
}
}
\NewDocumentCommand{\myfirst}{m}{
\expandafter\myfirsttask\input{#1}
}
\NewDocumentCommand{\mysecond}{m}{
\expandafter\mysecondtask\input{#1}
}
\ExplSyntaxOff
\begin{document}
\myfirst{argumentsFile}
\mysecond{argumentsFile}
\end{document}
参数文件.tex:
{first argument}%
{second argument}%
{third argument}%
{optional argument}
起初我没有使用\expandafter
并得到:
Runaway argument?
! Paragraph ended before \myfirsttask was complete.
<to be read again>
\par
我假设\myfirsttask
和\mysecondtask
dit 没有足够的参数,因为参数文件的内容尚未插入。因此,我在扩展和\expandafter
之前添加了 as 来插入参数文件。然而,这给了我\myfirsttask
\mysecondtask
! LaTeX Error: File `-NoValue-.tex' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: tex)
Enter file name:
! Emergency stop.
<read *>
l.34 \myfirst{argumentsFile}
\input
我认为这是因为我的argumentsFile中的花括号被???的扩展删除了。
有人知道如何正确导入/输入命令参数吗?
答案1
\input
不能通过一步扩展(在 LaTeX 中,\input
可以通过原语扩展)。
您可以吸收文件的内容,然后传递它:
\begin{filecontents*}{\jobname-ArgumentsFile}
{first argument}%
{second argument}%
{third argument}%
{optional argument}
\end{filecontents*}
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\myfirsttask}{m m m g}
{
#1~#2~#3
% do stuff
\IfNoValueF{#4}{%
(#4)
% do stuff
}
}
\NewDocumentCommand{\myfirst}{m}
{
\tl_set_from_file:Nnn \l_tmpa_tl { } { #1 }
\exp_last_unbraced:NV \myfirsttask \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\myfirst{\jobname-ArgumentsFile}
\end{document}