输入使用 MakeUppercase 命名的文件

输入使用 MakeUppercase 命名的文件

我有这个简单的文档:

\documentclass{article}

\newcommand{\inputFile}[2]
{%
    \input{"\MakeUppercase{#1} - \MakeUppercase{#2}"}%
}

\begin{document}
%
\inputFile{a}{b}
%
\end{document}

当我编译它时,会出现以下错误:

! Illegal parameter number in definition of \@filef@und.

我的文件名称中包含空格(这就是我将文件名括在“”中的原因)。我尝试对 进行一些操作\@@input,但对于名称中包含空格的文件,它无法正常工作。请问我该如何处理这个问题?

答案1

\MakeUppercase使用或转换为大写与\uppercase文件名所需的可扩展上下文不兼容\input。有几种解决方法:

如果\uppercase可以使用更简单的方法:

\uppercase{\input{"#1 - #2"}}

\MakeUppercase

\MakeUppercase{\protect\input{"#1 - #2"}}

\protect可防止\input过早执行。\MakeUppercase在转换为大写之前扩展参数。此外,它将参数放在一个组中。如果不需要,可以定义一个全局宏,稍后将其用作 中的文件名参数\input

\MakeUppercase{\gdef\noexpand\gtemp{"#1 - #2"}}\input{\gtemp}

答案2

假设A - B.tex包含

hylo

然后

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\cs_new_protected_nopar:Nn \patrik_inputfile:nn
{
  \tl_set:Nn \l_tmpa_tl  { \text_uppercase:n { #1 ~ - ~ #2 } }
  \file_input:V \l_tmpa_tl
}
\NewDocumentCommand \inputFile { m m }
{
  \group_begin:
  \patrik_inputfile:nn { #1 } { #2 }
  \group_end:
}
\cs_generate_variant:Nn \file_input:n { V }
\ExplSyntaxOff
\begin{document}
\inputFile{a}{b}
\end{document}

将生成一个写着‘hylo’的文档。

相关内容