\includegraphics:文件名中的点

\includegraphics:文件名中的点

\includegraphics无法处理包含多个点的文件名,将文件名与扩展名分开。显然,它使用第一个点之后的所有内容作为扩展名,然后,当然,抱怨未知的图形扩展名。

这很烦人,因为我经常有包含参数值的文件名,例如plot_a0.4_b0.6.pdf

有没有办法让 LaTeX 仅将最后一个点后面的字符串解释为扩展名?

答案1

您可以使用 屏蔽 TeX 标记扫描器中的其他点,从而隐藏它们{ },即:

\includegraphics{{plot_a0.4_b0.6}.pdf}

工作正常。

请注意,也可以删除扩展名,然后使用默认扩展名列表。请参阅graphicx手册中了解更多信息。如果要执行此操作,您需要对文件名进行双重分组,这样与参数的文件名一起构成了三个文件名:

\includegraphics{{{plot_a0.4_b0.6}}}

答案2

您可以使用包grffile带有选项multidot

https://texfaq.org/FAQ-grffilenames

答案3

实际上,支持此类文件名是 的初始设计规范的一部分graphicx。文件类型默认来自扩展名,但对于这种情况,有一个类型键,因此您可以选择type=epstype=bmp或任何需要的内容。


从标记为重复的问题中复制答案

例如,为了告诉 latex 它是 eps 类型以及文件本身使用的扩展名并找到边界框,您可以使用:

\documentclass{article}

\usepackage{graphicx}

\begin{document}


\includegraphics[width=5cm,type=eps,ext=.1.eps,read=.1.eps]{example}

\end{document}

这包括example.1.eps 使用 xelatex、或 latex/dvips 等。

答案4

虽然该问题针对一般情况进行了回答 - 我经常遇到这样一种情况,即我有一些具有常量(不变)但不标准扩展名的文件;并且我想pdflatex在批处理脚本上下文中“按原样”使用这些文件作为输入(这意味着,我不想在 Latex 代码或批处理代码中编写任何与文件名相关的解析逻辑)。

例如,通常\includegraphics{mydir/file01.csv_.pdf}会失败:

! LaTeX Error: Unknown graphics extension: .csv_.pdf.

有一件事是可行的,按照答案@DavidCarlisle

\includegraphics[ext=.csv_.pdf,type=pdf,read=*]{mydir/file01}

...但这需要我从文件名中去除扩展名,所以我必须在某处引入文件名解析逻辑。

然而,对我来说真正有效的是使用\DeclareGraphicsRule{ext}{type}{read-file}{command}(见grfguide.pdf:'graphics' 包中的软件包):

% preamble:
\DeclareGraphicsRule{.csv_.pdf}{pdf}{*}{}

% ...

\begin{document}

% ...

\includegraphics{mydir/file01.csv_.pdf}

... 这似乎工作正常,无需对 的文件名参数进行任何更改\includegraphics。请注意,command参数可以留空(否则用于系统转换),read-file我们从哪里读取大小/边界框信息:由于 是.csv_.pdf一个.pdf合适的文件,*我们只需说 - 从与声明的扩展名匹配的同一文件中读取大小。

相关内容