如何获取 LaTeX 中图形的高度

如何获取 LaTeX 中图形的高度

我有一些 LaTeX 代码

\begin{figure}
    ABC
    \caption{def}
\end{figure}

我希望能够在pdf输出中找到它的高度。概述的方法这里不起作用,产生错误:

! LaTeX Error: Not in outer par mode.

我考虑过使用\write18像素抓取技巧以某种方式测量图形本身的大小,但如果文档的标题大小发生了全局变化,那就会把事情搞乱。

我想知道是否有有效的方法来做到这一点。

答案1

这是一个解决方案

\documentclass{article}
\usepackage{capt-of}

\newsavebox\mybox
\begin{document}    
\sbox\mybox{\parbox[b]{\textwidth}{ABC\captionof{figure}{bla bla}}}
\the\ht\mybox
\end{document}

这是另一个解决方案:

\documentclass{article}

\begin{document}
\the\pagetotal

\begin{figure}[h]
    ABC
    \caption{def}
\end{figure}

\the\pagetotal

\end{document}

更新 在这个例子中,我们尝试在第一页手动重现浮动位置,并在第二页让乳胶完成这项工作。

笔记:可以看出,对于顶部位置来说没有问题。 复制底部位置很困难(如果不是不可能的话?) 在此处输入图片描述

\documentclass{article}
\usepackage{capt-of}
\usepackage{lipsum}

\newsavebox\mybox
\newcommand\myfigure[1][(Manually)]{\rule{5cm}{1cm}\captionof{figure}{My figure #1}}

\begin{document}                           
\sbox\mybox{\parbox[b]{\linewidth}{\myfigure
                             \boxmaxdepth \maxdepth
                             \vbox{}
                             \vskip -\floatsep
                             \topfigrule
                             \vskip \textfloatsep}} 

\noindent\parbox[b]{\linewidth}{\myfigure
                             \boxmaxdepth \maxdepth
                             \vbox{}
                             \vskip -\floatsep
                             \topfigrule
                             \vskip \textfloatsep}
\the\ht\mybox****\lipsum[3]

\sbox\mybox{\parbox[b]{\textwidth}{\myfigure}}
\noindent\parbox[b]{\textwidth}{\myfigure}
Height without any vspace:\the\ht\mybox****\lipsum[3-4]

bla bla

this is difficult, see value of the height in next page


\sbox\mybox{\parbox[b]{\linewidth}{\vskip \textfloatsep
                             \botfigrule
                             \vbox{}
                             \vskip -\floatsep
                             \myfigure}}
\noindent\parbox[b]{\linewidth}{\vskip \textfloatsep
                             \botfigrule
                             \vbox{}
                             \vskip -\floatsep
                             \myfigure}
\newpage\the\ht\mybox****\lipsum[3]
\begin{figure}[t]
\myfigure[(\LaTeX)]
\end{figure}
\lipsum[3-4]
\begin{figure}[b]
\myfigure[(\LaTeX)]
\end{figure}
\lipsum[3]
\end{document}

答案2

该数字存储在一个盒子里,以便您可以测量它(您需要为h浮点数多做一些工作,因为它们可能会在报告发生之前使用,如果在环境之后完成的话,就像这里一样)

\documentclass{article}

\begin{document}


\begin{figure}
    ABC
    \caption{def}
\xdef\thisfloat{\the\csname @currbox\endcsname}%
\end{figure}
\typeout{%
** This float + caption has height + depth:^^J**
\the\dimexpr\ht\thisfloat+\dp\thisfloat\relax}

\end{document}

生成日志

** This float + caption has height + depth:
** 30.77776pt

或收集到最后:

\documentclass{article}

\begin{document}


\begin{figure}
    ABC
    \caption{def\label{z}}
\xdef\thisfloat{\the\csname @currbox\endcsname}%
\end{figure}
\edef\tmp{\noexpand\AtEndDocument{%
\noexpand\foo{z}{\the\dimexpr\ht\thisfloat+\dp\thisfloat\relax}}}%
\tmp

aaaa

\begin{figure}
    ABC\\
XYZ
    \caption{def\label{z2}}
\xdef\thisfloat{\the\csname @currbox\endcsname}%
\end{figure}
\edef\tmp{\noexpand\AtEndDocument{%
\noexpand\foo{z2}{\the\dimexpr\ht\thisfloat+\dp\thisfloat\relax}}}%
\tmp


aaaa


\def\foo#1#2{% whatever you want to do with the data
\typeout{**^^J%
** This float (#1) + caption has height + depth: #2^^J**
}}

\end{document}

**
** This float (z) + caption has height + depth: 30.77776pt
** 
**
** This float (z2) + caption has height + depth: 42.77776pt
** 

相关内容