![如何在调用“\includegraphics”之前检查图像是否具有有效尺寸?](https://linux22.com/image/315915/%E5%A6%82%E4%BD%95%E5%9C%A8%E8%B0%83%E7%94%A8%E2%80%9C%5Cincludegraphics%E2%80%9D%E4%B9%8B%E5%89%8D%E6%A3%80%E6%9F%A5%E5%9B%BE%E5%83%8F%E6%98%AF%E5%90%A6%E5%85%B7%E6%9C%89%E6%9C%89%E6%95%88%E5%B0%BA%E5%AF%B8%EF%BC%9F.png)
与此问题相关尺寸太大。使用 \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
答案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.pdf
和tiger-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}