pdfpages 和 XeLaTeX:包括带有大写 .PDF 扩展名的 pdf

pdfpages 和 XeLaTeX:包括带有大写 .PDF 扩展名的 pdf

这是我发现的问题。我必须在 LaTeX 中包含一些 PDF 文件。LaTeX 代码是在运行时生成的,并且必须包含在给定目录中找到的任何 PDF 文件。这些文件可能具有大写的 .PDF 扩展名。我无法控制以防止这种情况发生,也无法重命名它们。我的引擎是 XeLaTeX。这一切都发生在装有 TeXLive 2013 的 FreeBSD 机器上。

在我的工作站上,如果我这样做,一切正常不是将文件的扩展名提供给 \includepdf 命令。它猜测它是 PDF,并且包含一切顺利。但是,如果我提供带有大写 .PDF 扩展名的完整文件名,我会得到一个空白页而不是包含,并且日志会抱怨找不到该文件。

这是一个最小的例子(带扩展):

\documentclass[11pt,a4paper]{article}
\usepackage{pdfpages}
\usepackage[margin=1.5cm,landscape,includehead,includefoot]{geometry}
\begin{document}
\nonstopmode
\includepdf[pages=-,pagecommand=\clearpage]{compta.PDF}
\end{document}

以下是日志摘录:

./Sans-titre.tex:6: Unable to load picture or PDF file 'compta.PDF'.
<to be read again> 
               }
l.6 ...pages=-,pagecommand=\clearpage]{compta.PDF}

The requested image couldn't be read because
the file was not found.

File: compta.PDF Graphic file (type QTm)

这已经够奇怪了,但好吧,我想,我还是保留扩展名吧。问题是,当在 FreeBSD 服务器上排版相同的 .tex 时,如果我保留扩展名,我会在日志中看到以下内容:

This is XeTeX, Version 3.1415926-2.5-0.9999.3 (TeX Live 2013)
 restricted \write18 enabled.
entering extended mode

! Package pdfpages Error: Cannot find file `compta'.

See the pdfpages package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.6 ...pdf[pages=-,pagecommand=\clearpage]{compta}

! Undefined control sequence.
\AM@checklast ...pii \\ \@tempcntb =\AM@pagecount 
                                                  \relax \ifAM@DVIoutput \if...
l.6 ...pdf[pages=-,pagecommand=\clearpage]{compta}

! Missing number, treated as zero.
<to be read again> 
                   \relax 
l.6 ...pdf[pages=-,pagecommand=\clearpage]{compta}

)
Runaway argument?
\expandafter \AM@setphantomdoc \AM@doclist ,\END \ifthenelse {\boolean \ETC.
! File ended while scanning use of \AM@gobble.
<inserted text> 
                \par 
<*> TMP_test.tex

! Emergency stop.
<*> TMP_test.tex

No pages of output.
Transcript written on TMP_test.log.

如果我输入 .PDF 扩展名,我会得到以下结果:

This is XeTeX, Version 3.1415926-2.5-0.9999.3 (TeX Live 2013)
 restricted \write18 enabled.
entering extended mode
! Unable to load picture or PDF file 'compta.PDF'.
<to be read again> 
                   }
l.6 ...pages=-,pagecommand=\clearpage]{compta.PDF}

<use  "compta.PDF" >
! Unable to load picture or PDF file 'compta.PDF'.
<to be read again> 
                   \GXT@clipend 
l.6 ...pages=-,pagecommand=\clearpage]{compta.PDF}

! Arithmetic overflow.
<recently read> \calc@Acount 

l.6 ...pages=-,pagecommand=\clearpage]{compta.PDF}

! Arithmetic overflow.
<recently read> \calc@Acount 

这让我很生气,尤其是当我看到如果完全相同的 PDF 文件具有小写扩展名,一切都会顺利进行时。我尝试将以下内容(一起和单独)添加到序言中:

\DeclareGraphicsExtensions{pdf,PDF,png,PNG,jpg,JPG,jpeg,JPEG,txt,TXT}
\DeclareGraphicsRule{.PDF}{pdf}{*}{}

但无济于事(事实上,我从 \DeclareGraphicsRule 获得的唯一结果是,我得到的不是包含的 PDF,而是 PDF 文件的路径的打印,位于页面中间。

我想要包含的 pdf 文件位于https://dl.dropboxusercontent.com/u/10487109/compta.PDF(不过,正如我所说,小写扩展名也可以正常工作,因此我认为文件本身没有问题)

有人能帮我吗?提前谢谢。谢谢


答案1

一些图形驱动程序支持大写扩展名(pdftex.def),其他的则不支持。2014 xetex.def/04/07 v0.99 版本则不支持。

简单的形式是手动添加对每个扩展的支持,例如:

\DeclareGraphicsRule{.PNG}{QTm}{QTm}{#1}
\DeclareGraphicsRule{.JPG}{QTm}{QTm}{#1}
\usepackage{grfext}
\AppendGraphicsExtensions*{.PNG,.JPG}

.PDF然而,由于存在错误,这种方法无法奏效。

下面的示例添加了 的支持扩展及其xetex.def大写变体,并修补了 的命令以xetex.def修复错误。

\documentclass{article}
\usepackage{graphicx}
\usepackage{grfext}

% bug in xetex.def
\usepackage{etoolbox}
\makeatletter
\patchcmd\XeTeX@include@QTm{%
  \lowercase{\edef\type@ext{\Gin@ext}}%
}{%
  \edef\type@ext{%
    \noexpand\lowercase{%
      \noexpand\def\noexpand\type@ext{\Gin@ext}%
    }%
  }%
  \type@ext
}{}{}
\let\Ginclude@QTm\XeTeX@include@QTm 
\patchcmd\G@measure@QTm{%
  \lowercase{\edef\type@ext{#2}}%
}{%
  \edef\type@ext{%
    \noexpand\lowercase{%
      \noexpand\def\noexpand\type@ext{#2}%
    }%
  }%
  \type@ext
}{}{}

\@for\@ext:=\Gin@extensions\do{%
  \uppercase\expandafter{%
    \expandafter\def\expandafter\@EXT\expandafter{\@ext}%
  }%
  \@ifundefined{Gin@rule@\@EXT}{%
    \expandafter
    \let\csname Gin@rule@\@EXT\expandafter\endcsname
        \csname Gin@rule@\@ext\endcsname
    % Patch rule to exchange lowercase extension with uppercase
    % (needed for ".PS" and ".EPS"
    \edef\@tempa{%
      \noexpand\patchcmd
      \expandafter\noexpand\csname Gin@rule@\@EXT\endcsname
      {{\@ext}}{{\@EXT}}{}{}%
    }\@tempa
  }{}%
  \expandafter
  \AppendGraphicsExtensions\expandafter*\expandafter{\@EXT}%
}
\makeatother

\begin{document}
  \includegraphics{TIGER}
\end{document}

相关内容