将图像作为 base64 字符串嵌入到 tex 文件中?

将图像作为 base64 字符串嵌入到 tex 文件中?

本网站上一个常见的问题是如何将图像直接嵌入 .tex 源文件中,而无需将图像放在单独的文件中。此类问题的示例(通常标记为重复)如下

不幸的是,这些答案都有些过时了。特别是,

  • 许多用户(几年前)回应说“用户根本不应该想要这个”,而是将多个文件作为 zip/tar 存档发送。然而,在这个 .tex 文件的自动生成变得越来越频繁的时代,单文件纯文本生成比多文件和/或二进制文件容易得多(尤其是在使用预定义框架时),这种说法不再成立。
  • 提供此类功能的软件包 https://gist.github.com/mikeashley/258731不再存在。另一个包https://github.com/zerotoc/pdfinlimg提供此功能,但仅适用于位图图像(png/jpg),不适用于 svg/eps/pdf/其他矢量格式,并将其编码为 HEX,与 base64 相比非常浪费。

因此,我想重新提出这个问题并再次提出这个问题:如何创建一个命令 \includebase64image 使得

\includebase64image{png}{iVBORw0KGgokIA...}
\includebase64image{pdf}{weEGE2ewFWE58q...}

得出的结果为\includegraphicx{a file with content type #1 and contents #2},即给定内容和类型的图像出现在生成的PDF文件中的当前位置?

答案1

在此处输入图片描述

如果你有一个命令行 base64 解码器(base64 -d此处)并允许

pdflatex --shell-escape

要运行外部命令,那么除了标准图形包之外您不需要任何其他东西。

这里我包含一个 base64 编码的 pdf 图像。

\documentclass{article}
\begin{filecontents*}{\jobname.64}
JVBERi0xLjUKJbXtrvsKMyAwIG9iago8PCAvTGVuZ3RoIDQgMCBSCiAgIC9GaWx0ZXIgL0ZsYXRl
RGVjb2RlCj4+CnN0cmVhbQp4nJWTO1LEMAyG+5xCNYXQy69j7BFoWIpsAdx/Bjlksx4nZE0VWSP/
3y9Z+ZwIY46SAjRBThRyhq8rvL4RXL8nAlFDTQw3jxTZvAxmkCKohSEKclzOaCF5SV6KZ/iY3l8c
IZSyKTSBFmGvdASBkqFZce0H50BrTdTqsNBW8cKapNpeA66qXfFts6rEGKP9w7zfKJGhCaJokNKb
vw9GyStcaD5kHvfgQ3HzsAW/PXSCz2bfw1btIMH9Pb7JCsmA+YbVvsvZ1DmonzMYJeRUx86p+F4Z
GGfMXHXvGRXBEkPNrLdUGP0zwzSwNuxGPTK/k6nu5ZpQUTSRI9ne3dAL7zkVoGCaUIo2DTUt/gU6
+9U6/xtIJSzkocmdrVNnfAyw6+3ZUg3Ma4ftX25hXKYfzwLt9wplbmRzdHJlYW0KZW5kb2JqCjQg
MCBvYmoKICAgMzA1CmVuZG9iagoyIDAgb2JqCjw8CiAgIC9FeHRHU3RhdGUgPDwKICAgICAgL2Ew
IDw8IC9DQSAxIC9jYSAxID4+CiAgID4+Cj4+CmVuZG9iago1IDAgb2JqCjw8IC9UeXBlIC9QYWdl
CiAgIC9QYXJlbnQgMSAwIFIKICAgL01lZGlhQm94IFsgMCAwIDI5Mi4zODk5MjMgNDM3LjI5MzI0
MyBdCiAgIC9Db250ZW50cyAzIDAgUgogICAvR3JvdXAgPDwKICAgICAgL1R5cGUgL0dyb3VwCiAg
ICAgIC9TIC9UcmFuc3BhcmVuY3kKICAgICAgL0NTIC9EZXZpY2VSR0IKICAgPj4KICAgL1Jlc291
cmNlcyAyIDAgUgo+PgplbmRvYmoKMSAwIG9iago8PCAvVHlwZSAvUGFnZXMKICAgL0tpZHMgWyA1
IDAgUiBdCiAgIC9Db3VudCAxCj4+CmVuZG9iago2IDAgb2JqCjw8IC9DcmVhdG9yIChjYWlybyAx
LjExLjIgKGh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZykpCiAgIC9Qcm9kdWNlciAoY2Fpcm8gMS4x
MS4yIChodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcpKQo+PgplbmRvYmoKNyAwIG9iago8PCAvVHlw
ZSAvQ2F0YWxvZwogICAvUGFnZXMgMSAwIFIKPj4KZW5kb2JqCnhyZWYKMCA4CjAwMDAwMDAwMDAg
NjU1MzUgZiAKMDAwMDAwMDcwNSAwMDAwMCBuIAowMDAwMDAwNDE5IDAwMDAwIG4gCjAwMDAwMDAw
MTUgMDAwMDAgbiAKMDAwMDAwMDM5NyAwMDAwMCBuIAowMDAwMDAwNDkxIDAwMDAwIG4gCjAwMDAw
MDA3NzAgMDAwMDAgbiAKMDAwMDAwMDg5NyAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDgKICAg
L1Jvb3QgNyAwIFIKICAgL0luZm8gNiAwIFIKPj4Kc3RhcnR4cmVmCjk0OQolJUVPRgo=
\end{filecontents*}
\usepackage{graphicx}

\begin{document}

\immediate\write18{base64 -d \jobname.64 > \jobname-tmp.pdf}

picture is

\fbox{\includegraphics[width=3cm]{\jobname-tmp.pdf}}

\end{document}

相关内容