如何在latex文档源中放置一个小图形?

如何在latex文档源中放置一个小图形?,latex,pdflatex,Latex,Pdflatex,我有一个小的图形,这是我的文件的一部分。它是PDF,有193行,有一些二进制数据和postscript混合在一起。我目前正在使用graphicx软件包,并将pdf作为一个单独的文件。有没有一种方法可以直接在我的latex源代码中内联它?看看,我认为没有一种方法可以在latex中内联二进制数据。您可以使用各种软件包(如lpthnc推荐的渐近线)将图形重新创建为向量类型的图像。如果你真的很聪明,你可以编写一些TeX来以数组格式存储数据并重新创建它,但我认为没有一个包可以简单地做到这一点。你还应该看看

我有一个小的图形,这是我的文件的一部分。它是PDF,有193行,有一些二进制数据和postscript混合在一起。我目前正在使用graphicx软件包,并将pdf作为一个单独的文件。有没有一种方法可以直接在我的latex源代码中内联它?

看看,我认为没有一种方法可以在latex中内联二进制数据。您可以使用各种软件包(如lpthnc推荐的渐近线)将图形重新创建为向量类型的图像。如果你真的很聪明,你可以编写一些TeX来以数组格式存储数据并重新创建它,但我认为没有一个包可以简单地做到这一点。

你还应该看看
pdfpages
包。在PDF文档中包含PDF的各种选项


pdfpages:

好的,我认为这是您想要的,但除非您真的需要这样做,否则其他解决方案会更好

要使用此解决方案,您需要:

  • 在Latex命令中启用shell转义(
    -shell转义
    命令行选项)。由于安全原因,默认情况下禁用Shell转义
  • 可以访问编译文件的
    uuencode
    uudecode
    程序
假设您的图形是
graphic.png
,主文档是
doc.tex
。首先,编码
graphic.png
,并将其附加到末尾(编码的数据都是文本):

然后,在将图形包括在
doc.tex
中之前,请确保您已经有了这些:

\immediate\write18{cat \jobname.tex | uudecode}
例如,我创建了一个文档:

\documentclass{article}
\immediate\write18{cat \jobname.tex | uudecode}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=\textwidth]{graphic}
\end{document}
%%% Do not touch the data below, this is added by uuencode.
begin 644 graphic.png
..... (stripped a lot of lines) ...
`
end
然后,这将起作用:

$ pdflatex -shell-escape doc

正如我所说,有更好的解决方案,除非你真的需要一个源文件,否则不要这样做。

我设计了一个解决方案:

  • 使用
    pdftops
    (软件包的一部分)将pdf转换为postscript
  • ,及
  • 使用graphicx包和
    \special
    宏嵌入postscript
  • 缺点是使用\special嵌入postscript需要我发出dvi而不是pdf。如果能够改进此解决方案以允许直接发送pdf,那就太好了

    乳胶源看起来像这样

    \noindent\vbox to 112pt{\vfil\hbox to 248pt{\special{" gsave
    currentfile /ASCIIHexDecode filter cvx exec
           25  21  50  53  2d  41  64  6f  62  65  2d  33  2e  30  20  45
           50  53  46  2d  33  2e  30  0a  25  20  50  72  6f  64  75  63
           65  64  20  62  79  20  78  70  64  66  2f  70  64  66  74  6f
           70  73  20  33  2e  30  32  0a  25  25  43  72  65  61  74  6f
    ...
           65  72  0a  65  6e  64  0a  25  25  44  6f  63  75  6d  65  6e
           74  53  75  70  70  6c  69  65  64  52  65  73  6f  75  72  63
           65  73  3a  0a  25  25  45  4f  46  0a
    >
    grestore
    }
    \hfil}}
    

    我做了一个完整的例子。

    谢谢你的建议。很遗憾,我无法修改或重新创建图形。真的吗?逆向工程很有趣。只需以高分辨率查看数据点。渐近线给你惊人的质量。好的,我喜欢这个答案。谢谢不过,这对我来说不太管用,因为我的目标是提供一个latex包,该包提供一个宏,可以将图像与其他文本放在一起。不过,这比我发布的解决方案更直接,所以这可能是一个更好的答案,取决于一个人在做什么。我仍然看不到一个足够好的论据来解释为什么你想做你想做的事情,但是我不完全了解你的用例。很好的观点。它启发我找到一种转换为ASCII的方法;查看我发布的解决方案,了解我所做的。此包/链接似乎不再存在?:(
    \noindent\vbox to 112pt{\vfil\hbox to 248pt{\special{" gsave
    currentfile /ASCIIHexDecode filter cvx exec
           25  21  50  53  2d  41  64  6f  62  65  2d  33  2e  30  20  45
           50  53  46  2d  33  2e  30  0a  25  20  50  72  6f  64  75  63
           65  64  20  62  79  20  78  70  64  66  2f  70  64  66  74  6f
           70  73  20  33  2e  30  32  0a  25  25  43  72  65  61  74  6f
    ...
           65  72  0a  65  6e  64  0a  25  25  44  6f  63  75  6d  65  6e
           74  53  75  70  70  6c  69  65  64  52  65  73  6f  75  72  63
           65  73  3a  0a  25  25  45  4f  46  0a
    >
    grestore
    }
    \hfil}}