我有这个简单的文档:
\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’的文档。