如何在调用“\includegraphics”之前检查图像是否具有有效尺寸?

如何在调用“\includegraphics”之前检查图像是否具有有效尺寸?

与此问题相关尺寸太大。使用 \includegraphics 时 pdflatex 出现错误

我在 Mathematica 中运行大量计算,生成数千个 pdf 格式的图像文件。其中一些文件太大,无法包含在 Latex 中,因此我的构建可能会在中途失败。

有没有办法在 Latex 中使用图像文件名检查其大小和尺寸\maxdimen不会导致\includegraphics失败?这样我就可以在 Latex 中添加条件并避免加载这些图像文件。这是一个 MWE

\documentclass[10pt,notitlepage]{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{image}
\end{document}

上述情况将失败文件因为文件太大。

在调用之前我需要添加什么 Latex 代码来检查图像大小是否有效\includegraphics

TL 2015,Linux

更新:

感谢 cfr 评论,使用pdfinfo -box image.pdf给出

>pdfinfo -box image.pdf
Creator:        Wolfram Mathematica 10.1.0.0 for Microsoft Windows (64-bit) (March 23, 2015) Student Edition - Personal Use Only
Producer:       
CreationDate:   Tue Jul 21 13:15:48 2015
ModDate:        Tue Jul 21 13:15:48 2015
Tagged:         no
Form:           none
Pages:          1
Encrypted:      no
Page size:      504 x 18988 pts
Page rot:       0
MediaBox:           0.00     0.00   504.00 18988.00
CropBox:            0.00     0.00   504.00 18988.00
BleedBox:           0.00     0.00   504.00 18988.00
TrimBox:            0.00     0.00   504.00 18988.00
ArtBox:             0.00     0.00   504.00 18988.00
File size:      337034 bytes
Optimized:      no
PDF version:    1.5
>

我需要弄清楚如何在 Latex 文档中执行此操作,获取要检查的尺寸\maxdimen并添加 Latex 条件以避免加载此特定图像。这必须在 Latex 中完成,因为 Latex 文件也是自动生成的,图像文件也是如此,所有这些都是通过运行脚本完成的。所以这一切都必须自动化。

如果 Latex 提供一个可以在加载前获取图像尺寸的宏/包,那就太好了。

答案1

包含这样的图像似乎毫无意义,但无论如何,\maxdimen只要您不对长度进行任何算术运算,tex 就可以允许更大的框:

在此处输入图片描述

\documentclass[10pt,notitlepage]{article}
\usepackage{graphicx}

\begin{document}


\centering
\mbox{\pdfimage height \textheight{image.pdf}}

\end{document}

答案2

这肯定不是最有效或最优雅的方式,但我很好奇它是否可行。

bashful允许您在 LaTeX 文档中运行脚本,当然,前提是您在启用 shell 转义的情况下进行编译。

输入以下内容myimagewidth.sh

#!/bin/sh -
pdfinfo $1.pdf  | grep "Page size" | sed -e 's/^Page size:[[:space:]]*//' -e 's/ x.*$//' -e 's/\..*//' -e 's/[^0-9]*//g'

并将以下内容放入myimageheight.sh

#!/bin/sh -
pdfinfo $1.pdf  | grep "Page size" | sed -e 's/^Page size:[[:space:]]*.* x //' -e 's/\..*$//' -e 's/[^0-9]*//g'

并使它们都可执行。

chmod +x myimagewidth.sh myimageheight.sh

以下代码假设脚本与您的文件位于同一目录中.tex。脚本和代码还假设您要测试的 PDF 文件位于同一目录中,并且名为enfys.pdftiger-eps-converted-to.pdf。显然,您需要根据自己的情况进行调整!

\documentclass{article}
\usepackage{graphicx,bashful}
\newcounter{myimageheight}
\newcounter{myimagewidth}
\newcommand*\myincludegraphics[2][]{%
  \stepcounter{myimagewidth}%
  \stepcounter{myimageheight}%
  \ifnum16384>\value{myimagewidth}%
  \ifnum16384>\value{myimageheight}%
  \includegraphics[#1]{#2}%
  \fi
  \fi}
\begin{document}
\bash
./myimagewidth.sh enfys
\END
\setcounter{myimagewidth}{\bashStdout}
\bash
./myimageheight.sh enfys
\END
\setcounter{myimageheight}{\bashStdout}%
\myincludegraphics[width=\textwidth,height=\textheight,keepaspectratio]{enfys}
\bash
./myimagewidth.sh tiger-eps-converted-to
\END
\setcounter{myimagewidth}{\bashStdout}
\bash
./myimageheight.sh tiger-eps-converted-to
\END
\setcounter{myimageheight}{\bashStdout}%
\myincludegraphics{tiger-eps-converted-to}
\end{document}

相关内容