我如何计算图形使用的总空间?

我如何计算图形使用的总空间?

我即将完成我的博士论文,我需要指定论文的一些技术特征,包括所有图表使用的累计空间(以页数为单位)。是否有任何神奇的函数可以告诉我这个页数?还是我应该用眼睛测量?

答案1

这是通过修补\end@float图形等所使用的命令来实现的。

\documentclass{article}
\usepackage{etoolbox}
\usepackage{pgfmath}

\newlength{\sumfloatht}
\setlength{\sumfloatht}{0pt}

\makeatletter
\patchcmd{\end@float}{\@endfloatbox}{\@endfloatbox
  \global\advance\sumfloatht by \ht\@currbox}{}{}

\AtEndDocument{\pgfmathdivide{\sumfloatht}{\textheight}%
  \edef\@currentlabel{\pgfmathresult}%
  \label{totalpages}}
\makeatother

\newcommand{\totalpages}{\pgfmathdivide{\sumfloatht}{\textheight}%
  \pgfmathresult}

\begin{document}
\ref{totalpages} pages.

\begin{figure}[t]
  \rule{\textwidth}{200pt}
\end{figure}

\begin{figure}[h]
  \rule{\textwidth}{200pt}
\end{figure}

\begin{figure}[bp]
  \rule{\textwidth}{200pt}
\end{figure}

{\the\sumfloatht} total height.

{\totalpages} pages.

\end{document}

此版本区分了图形和表格。要添加算法浮点数(例如),只需创建\sumalgorithmht长度并将\label等添加到\AtEndDocument

\documentclass{article}
\usepackage{etoolbox}
\usepackage{pgfmath}

\newlength{\sumfigureht}\setlength{\sumfigureht}{0pt}
\newlength{\sumtableht}\setlength{\sumtableht}{0pt}
\newlength{\sumfloatht}\setlength{\sumfloatht}{0pt}% anything else

\makeatletter
\patchcmd{\end@float}{\@endfloatbox}{\@endfloatbox
  \@ifundefined{sum\@captype ht}{\global\advance\sumfloatht by \ht\@currbox}%
    {\global\expandafter\advance\csname sum\@captype ht\endcsname by \ht\@currbox}%
}{}{}

\AtEndDocument{\pgfmathdivide{\sumfigureht}{\textheight}%
  \edef\@currentlabel{\pgfmathresult}%
  \label{figurepages}%
  \pgfmathdivide{\sumtableht}{\textheight}%
  \edef\@currentlabel{\pgfmathresult}%
  \label{tablepages}%
  \pgfmathdivide{\sumfloatht}{\textheight}%
  \edef\@currentlabel{\pgfmathresult}%
  \label{floatpages}%
}
\makeatother

\begin{document}
\ref{figurepages} figure pages.

\ref{tablepages} table pages.

\ref{floatpages} anything else.

\begin{figure}[h]
  \rule{\textwidth}{0.2\textheight}
\end{figure}

\begin{table}[h]
  \rule{\textwidth}{0.3\textheight}
\end{table}

\end{document}

答案2

请向 John Kormylo 提供解决方案表示感谢!我只是展示了一个方便的解决方法,使用包将此值包含在文档的任何位置totcount(需要运行两次)。

\documentclass{article}

\usepackage{etoolbox}
\usepackage{pgfmath}
\usepackage{totcount}

\makeatletter
\AtBeginDocument{%
    \newlength{\sumfloatheight@new}%
    \patchcmd{\end@float}{\@endfloatbox}{\@endfloatbox \global\advance\sumfloatheight@new by \ht\@currbox}{}{}%
    \newtotcounter{sumfloatheight@old}%
    \newlength{\sumfloatheight@old}%
    \setlength{\sumfloatheight@old}{\totvalue{sumfloatheight@old}sp}%
    \newcommand{\totalfigurepages}{\pgfmathdivide{\sumfloatheight@old}{\textheight}\pgfmathresult}%
}%
\AtEndDocument{%
    \setcounter{sumfloatheight@old}{\sumfloatheight@new}%
}%
\makeatother

\begin{document}

\totalfigurepages{} pages.

\begin{figure}[t]
  \rule{\textwidth}{200pt}
\end{figure}

\begin{figure}[h]
  \rule{\textwidth}{200pt}
\end{figure}

\begin{figure}[bp]
  \rule{\textwidth}{200pt}
\end{figure}

\totalfigurepages{} pages.

\end{document}

相关内容