从文件输入命令参数

从文件输入命令参数

我创建了一些带有参数的新命令。我的几个命令都带有相同的(冗长的)参数。因此,我将这些参数放在一个单独的文件中。但我似乎无法输入或导入这些参数。

主要.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\mysecondtaskdit 没有足够的参数,因为参数文件的内容尚未插入。因此,我在扩展和\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}

在此处输入图片描述

相关内容