「LaTex」- 导出 PNG 图片

  CREATED BY JENKINSBOT

问题描述

我们需要将 LaTeX 文档转换为 PNG 图片(我们需要使用 LaTeXbytefield 包绘制“字节序列图”,以在 Zim 中显示)

该笔记将记录:如何使用 .tex 文件,生成 PNG 图片。

方案一、latex => dvi => png

# 导出图片
latex /path/to/file.tex
dvipng file.dvi

# 显示图片
display file1.png

关于 graphicx\rotatebox 问题

DVI to PDF Converter – TeX – LaTeX Stack Exchange
Which DVI viewer on linux? – TeX – LaTeX Stack Exchange

该方法无法很好的处理 graphicx\rotatebox 命令,如图 D/B 与 AVL 偏移(本应该旋转 90 度,以垂直显示):

经过测试,应该是 dvipng 命令的问题:
1)进行 latex => dvi 转换,然后使用 xdvi 打开 DVI 文件,将如上图显示

(1)可能 xdvi 程序存在问题;(2)可能生成的 DVI 文件存在问题;

2)进行 laxtex => dvi => pdf 转换(dvipdfm example.dvi),在 PDF 中,显示正常

(1)因为能够”还原“,因此 DVI 文件没有问题;(2)可能 xdvi 程序有问题,并且 dvipng 也可能有问题;

这也引出我们的「方案二、使用 standalone 处理」(我们的需求本就是:只需要生成的图片,而不是整个文档)

方案二、使用 standalone 处理

使用 stadalone 包,可以直接将 LaTeX 文档导出 PNG 图片(在内部,依旧使用 Shell 命令进行转换)。

对于如下代码:

% example.tex
\documentclass[convert={density=120,outext=.png}]{standalone}
\usepackage{bytefield}
\usepackage{graphicx}

\begin{document}
    \begin{bytefield}[bitwidth=1.5em, bitheight=\widthof{~AVL~}, endianness=big]{32}
        \bitheader{0-24,31} \\
        & \bitbox{8}{Base (31-24)} & \bitbox{1}{G} & \bitbox{1}{\rotatebox{90}{D/B}}
        & \bitbox{1}{L} & \bitbox{1}{\rotatebox{90}{AVL}} & \bitbox{4}{Limit (19-16)}
        & \bitbox{1}{P} & \bitbox{2}{DPL} & \bitbox{1}{S} & \bitbox{4}{TYPE}
        & \bitbox{8}{Base (23-16)}
    \end{bytefield}
\end{document}

执行 latex -shell-escape -halt-on-error example.tex 命令,将直接输出 example.png 图片:

下面是更复杂的例子(参考 CTAN: Package standalone 文档),演示如何修改用于转换图片的命令:

\documentclass[
    convert={
        convertexe={convert},
        command=\unexpanded{{
            \convertexe \space
            -density \density \space
            \infile \space
            -resize \size \space
            \outfile}},
        density=800,size=800x600,outext=.png
    },
    border={.5 .5 .5 2mm},
]{standalone}

\usepackage{bytefield}
\usepackage{graphicx}

\begin{document}
    \begin{bytefield}[bitwidth=1.5em, bitheight=\widthof{~AVL~}, endianness=big]{32}
        \bitheader{0-24,31} \\
        & \bitbox{8}{Base (31-24)} & \bitbox{1}{G} & \bitbox{1}{\rotatebox{90}{D/B}}
        & \bitbox{1}{L} & \bitbox{1}{\rotatebox{90}{AVL}} & \bitbox{4}{Limit (19-16)}
        & \bitbox{1}{P} & \bitbox{2}{DPL} & \bitbox{1}{S} & \bitbox{4}{TYPE}
        & \bitbox{8}{Base (23-16)}
    \end{bytefield}
\end{document}

这将生成更加清晰的图片(依旧模糊,需要更好的控制 convert 命令参数):

参考文献

pdf – Including graphics for both DVI and PNG – TeX – LaTeX Stack Exchange
graphics – Compile a LaTeX document into a PNG image that’s as short as possible – TeX – LaTeX Stack Exchange