在 LaTeX 包/文档中分发/嵌入图像的正确方法是什么?

在 LaTeX 包/文档中分发/嵌入图像的正确方法是什么?

我正在创建一个需要渲染图像的新文档类(例如标题页上有一个 (徽标) 。将图像与类一起分发的正确方法是什么?图像文件是否应与文件一起分发.cls?这对我来说似乎是一种黑客行为,因为用户必须将该图像文件与使用该类的每个文档放在同一目录中,对吗?

我似乎记得(几年前)读过一种将图像嵌入文件.tex本身的方法。这种方法似乎也容易出错,因为人们必须知道文档是使用pdftex(要求图像是文件.pdf)还是latex(要求.eps文件)呈现的。

我最终采用的方法是将徽标转换为 Tiz 代码,我将其嵌入到.cls文件中。缺点是我的课程现在需要tikz依赖项,而许多使用旧 LaTeX 安装的用户没有tikz安装。

我的方法很有效,因为我的原始图像是简单的矢量图。如果它是光栅图像,该怎么办?

处理这个问题的正确方法是什么?

答案1

方法有很多种,其中‘最佳’方法取决于目标社区的性质。

方法一是使用.dtx文件分发您的类。然后您可以.eps在源中包含文件,并在解压时将其提取出来。我在chemstyle包。现在,你最终需要使用latex而不是pdflatex在这种情况下,虽然可以使用自动转换auto-pst-pdf包或 TeX Live 2010 中无需额外努力。

第二种方法是将您的文件作为可立即安装的“TDS 样式”.zip文件分发。这里的想法是,您将所有内容包含在.zip具有正确文件夹结构的文件中,只需在用户 PC 上的本地 texmf 文件夹中解压即可。在这种情况下,您可以同时包含图片的.eps.pdf版本。此方法也最适合光栅图像,因为您可以拥有一个.jpeg并将pdflatex其转换为用户.eps格式latex

第三种方法是像你说的那样使用tikz。这样就不需要文件本身以外的任何东西.cls,并且使用latex和时也很容易pdflatex。缺点是需要相当新的发行版。不过,您可能会发现最好要求某些东西是最新的,因为其他软件包也会随着时间的推移而发生很大变化。

最后,您可以不用太担心,只需提供一个.zip包含必要附加内容的标准文件即可。这在期刊中很常见。然后由用户将正确的文件放在正确的位置,但这可能是最简单、最通用的方法。

正如我所说,在特定情况下什么是最好的,在某种程度上取决于具体情况。例如,通常只有组织内部才需要徽标。我开设了一个期刊课程,在“实际内容”中包含徽标,但这只是出版商最终印刷时才需要的。因此,用户版本只有一个空格!

答案2

我不知道正确的处理这个问题的方法是,但这里有一个想法。用 结束你的 .cls 文件\endinput。之后,包含 eps 的内容。之后,放入一个标记线,然后包含 pdf 的内容。

然后,对于需要显示图像的代码,使用\openine-TeX 扩展\readline逐行读取类文件,直到到达\endinput。然后,您要写入的\openout文件foo.eps,读取并写入每一行,直到到达标记。然后,您写入\closeouteps 文件,\openout文件foo.pdf,读取并写入每一行,直到\ifeof为真。(e-TeX 扩展\unless在循环中非常方便,例如\loop\unless\ifeof\file ...\repeat。)最后是\closeoutpdf 和\closein类文件。

然后您只需使用\includegraphics{foo}它就会选择正确的一个。

有一些细节需要注意,比如处理\endlinechar,但原则上,它应该可以工作。

相关内容