使用 chemfig 包从生成的 PNG 中获取深度

使用 chemfig 包从生成的 PNG 中获取深度

我从 latex 代码生成 PNG 图像以显示在 Web/移动应用程序中。一般流程如下:

  1. 客户端使用我应该渲染的公式进行 API 调用
  2. 我将公式包装在序言中并在其上运行乳胶
  3. 从生成的 .dvi 中,我使用 --depth 运行 dvipng

这个过程给了我一个 PNG 图像和深度信息,并且已经运行了一段时间。现在我想添加渲染化学公式的功能,所以我添加了 chemfig 包,这就是问题出现的地方。

网上有一些答案,比如这里这里建议使用 pdflatex 与 chemfig,然后使用另一个工具将 PDF 转换为 PNG,因为仅使用 dvipng 无法生成正确的图像。

使用 dvipng 生成

使用 pdflatex + convert 生成

所以我可以正确渲染公式。问题是:有没有办法在第二个流程中获取图像深度?

生成图像的 tex 片段是:

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{cancel}
\usepackage{color}
\usepackage{chemfig}
\usepackage{yhmath}  % for \wideparen
\renewcommand*\familydefault{\sfdefault}
\usepackage[active,textmath,tightpage]{preview}

\begin{document}$\displaystyle \chemfig{A-B}$\end{document}

编辑:使用建议的解决方案将信息写入另一个文件,我得到了一个空文件。添加\immediate写入后它不再是空的,但所有值都是 0.0pt。

完整来源是

\documentclass[12pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{cancel}
\usepackage{color}
\usepackage{chemfig}
\usepackage{yhmath}  % for \wideparen                                                                                                                                                    
\renewcommand*\familydefault{\sfdefault}
\usepackage[active,textmath,tightpage]{preview}

\setatomsep{2.0 em}    % 'Fixed Bond Length'                                                                                                                                             

\makeatletter
\global\let\tikz@ensure@dollar@catcode=\relax
\makeatother

\newsavebox\frm
\sbox\frm{$\displaystyle \chemfig{A-B} $}
\newwrite\frmdims
\immediate\openout\frmdims=\jobname.dims
\immediate\write\frmdims{depth: \the\dp\frm}
\immediate\write\frmdims{height: \the\ht\frm}
\immediate\write\frmdims{width: \the\wd\frm}
\immediate\closeout\frmdims

\begin{document}
\usebox\frm
\end{document}

答案1

您可以在 LaTeX 中测量高度、宽度和深度,并在额外的文件中提供这些信息。将以下文档转换为 pdflatex 后,

\documentclass{standalone}
\usepackage{chemfig}
\newsavebox\frm
\sbox\frm{$\displaystyle\chemfig{A-B}$}
\newwrite\frmdims
\openout\frmdims=\jobname.dims
\write\frmdims{depth: \the\dp\frm}
\write\frmdims{height: \the\ht\frm}
\write\frmdims{width: \the\wd\frm}
\begin{document}
\usebox\frm
\end{document}

除了 pdf 文件之外,您还会获得一个dims包含所需信息的扩展名的文本文件。

depth: 0.0pt
height: 6.83331pt
width: 37.29172pt

相关内容