我想定义一个命令,\file#1
以便与一起使用\input{\file#1}
,其中#1
给出了一个条目,以及计数器\thefile#1
MWE 是下一个代码
\documentclass{article}
\usepackage{xstring}
\newcommand{\fileone}{testfile}
\newcommand{\file}[2]{%
\IfStrEqCase{#1}{%
{one}{%
\newcounter{file#1}\setcounter{file#1}{#2}\thefileone
\input{\fileone}
}
}}
\begin{document}
Hello, \file{one}{20}
\commandone
\end{document}
并且该文件testfile.tex
已\commandone
定义为
\newcommand{\commandone}{This a test in file "\fileone"}
。
我想用“#1”替换“one”这个词,以便在 的定义上使用\thefile#1
和。\input{\file#1}
\file
答案1
动态定义一个新的计数器并不总是一个好主意,但是这样做是可行的:
从其他宏或标记生成命令序列是通过来完成的\csname file#1\endcsname
,例如,对于计数器输出也是相同的\csname the#1\endcsname
。
我建议使用\InputIfFileExists{}{}{}
而不是\input{...}
只
\documentclass{article}
%\usepackage{xstring}
\newcommand{\fileone}{testfile}
\newcommand{\filethree}{otherfile}
\begin{filecontents}{\filethree.tex}
\newcommand{\commandthree}{This a test command in file "otherfile"}
\end{filecontents}
\newcommand{\file}[2]{%
\newcounter{file#1}\setcounter{file#1}{#2}\csname thefile#1\endcsname%
\InputIfFileExists{\csname file#1\endcsname}{}{}%
}
\begin{document}
Hello, \file{one}{20}
\commandone
Now: \file{three}{1000}
\commandthree
\end{document}