如何使用 LaTeX 生成字符的 png 图像

如何使用 LaTeX 生成字符的 png 图像

我需要生成具有透明背景的拉丁字符和 AMS 符号的 PNG 图像。每幅图像的尺寸应与其框的尺寸完全一致。我知道使用 LaTeX 可以做到这一点,因为我看到在线 LaTeX 公式编辑器可以生成这样的图片。目前我只能生成已知纸张尺寸(A4、Letter 等)的 dvi 和 pdf 文件。输出的大小必须与其内容相符,并且输出必须是具有透明背景的 png 格式。

我想用程序来做这件事,因为我需要成千上万个字符和符号的 LaTeX 生成的图像。请告诉我是否有任何 CLI 解决方案。此外,有些字符只能由 XeTeX 和 XeLaTeX 生成(非拉丁文字的字符)。

答案1

如何使用dvipng

\documentclass{minimal}
\newcount\n
\parindent=0pt
\begin{document}
\n=1
\loop\ifnum\n<256
        \char\n
        \advance\n by 1
        \newpage
\repeat
\char0
\end{document}

然后运行latex l; dvipng l; mv l256.png l0.png

显然,这只能解决部分问题,但它应该演示如何处理可以通过 dvi 输出完成的问题。

答案2

要生成仅与打印内容一样大的 PDF 页面,您可以使用包previewstandalone使用它的类。为了达到您的目的,我建议preview直接在循环中使用,然后使用 Image Magickconvert将 PDF 转换为多个 PNG:

% chars.tex
\documentclass{article}
\usepackage{pgffor}
\usepackage[active,tightpage]{preview}
\setlength{\PreviewBorder}{0pt}
\begin{document}
\foreach \n in {0,...,255} {%
  \begin{preview}\char\n\end{preview}%
}%
\end{document}

然后:

pdflatex chars.tex
convert -density 600 chars.pdf -quality 90 chars.png

但是您应该知道,角色可以交换其官方边界框,因此图像可能会被剪掉一些内容。您可以尝试在\PreviewBorder其中添加一些内容,然后pdfcrop在转换为 PNG 之前使用。

答案3

这不是 LaTeX 解决方案,但如果您想要生成的字符可用作 TrueType 或 OTF 字体,则可以直接使用 ImageMagick,在本例中为拉丁现代罗马字 10pt 的代码点 00C0 到 00C7 生成图像:

for (( i=192; i<200; i++ )); do
    codepoint=`printf %04x $i`
    env LC_CTYPE=en_US.utf8 printf "\u$codepoint" \
         | convert -background transparent -fill black -pointsize 10 \
         -font /usr/share/texmf/fonts/opentype/public/lm/lmroman10-regular.otf \
         label:@- $codepoint.png
done

相关内容