我需要生成具有透明背景的拉丁字符和 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 页面,您可以使用包preview
或standalone
使用它的类。为了达到您的目的,我建议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