如何在 pdfpages 中使用带有逗号的文件名?
该grffile
包没有帮助,该\detokenize
命令也没有帮助
该\string
命令也不起作用。例如
\includepdf{\string"C:/data/tesi/papers_literature_review/stampati/Tyebjee, Bruno - A model of venture capitalist investment activity.pdf"}
给我:
未知的图形扩展名:.pdf“。...nture capitalist investment activity.pdf”}
也就是说我尝试过任何解决方案这回答无果
请不要回答说我不应该在文件名中使用逗号。我们已经是 2017 年了,我们仍然无法处理特殊字符
这是一个不起作用的例子:
\documentclass[a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage[multidot, extendedchars]{grffile}
\usepackage{pdfpages}
\begin{document}
\includepdf[keepaspectratio]{\detokenize{C:/data/tesi/papers_literature_review/stampati/Tyebjee, Bruno - A model of venture capitalist investment activity.pdf}}
\end{document}
答案1
\ExplSyntaxOn
\RenewDocumentCommand{\includepdf}{O{}m}
{
\tl_set:Nx \l_tmpa_tl { \tl_to_str:n { #2 } }
\tl_replace_all:Nnf \l_tmpa_tl { , } { \char_generate:nn { `, } { 11 } }
\ORIincludepdf[#1]{\l_tmpa_tl}
}
\ExplSyntaxOff
问题是,pdfpages
使用代码来分割选项也用于管理文件名,因此当文件名中有逗号时,就会出现问题。事实上,文件加载正确,但当需要使用它,问题就出现了。
可以通过将文件名中的逗号更改为具有不同类别代码的字符来解决此问题。
\documentclass{article}
\usepackage[multidot, extendedchars]{grffile}
\usepackage{pdfpages}
\usepackage{xparse,letltxmacro}
% save the original macro
\LetLtxMacro\ORIincludepdf\includepdf
\ExplSyntaxOn
\RenewDocumentCommand{\includepdf}{O{}m}
{
% store the file name as a string
\tl_set:Nx \l_tmpa_tl { \tl_to_str:n { #2 } }
% replace commas (catcode 12) with commas (catcode 11)
\tl_replace_all:Nnf \l_tmpa_tl { , } { \char_generate:nn { `, } { 11 } }
\ORIincludepdf[#1]{\l_tmpa_tl}
}
\cs_generate_variant:Nn \tl_replace_all:Nnn { Nnf }
\ExplSyntaxOff
\begin{document}
\includepdf[keepaspectratio,pages={-}]{file, with space, and comma.pdf}
\end{document}
答案2
然而,即使在 2017 年,在文件名中添加空格和逗号也不是一个好主意
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{pdfpages}
\begin{document}
\typeout{===}
{\catcode`\,=11 \includepdf{abc,xyz}}
\typeout{===}
\end{document}
按照日志中所示进行工作:
===
[1 <./abc,xyz.pdf{/usr/local/texlive/2017/texmf-var/fonts/map/pdftex/updmap/pdf
tex.map}>]
===
或者如果你确实需要同时使用标点逗号
{\catcode`\,=11 \gdef\zz{abc,xyz}} \includepdf[keepaspectratio, pages={-}]{\zz}