如何从 \listoffigures 测量预期输出的高度

如何从 \listoffigures 测量预期输出的高度

定义了一个新命令 \sectiontest{<text part>}测量文本特定部分相对于的高度\textheight。如果测试部分的高度超出文本高度的一半,它会插入一个\newcolumn命令,将后面的文本移到下一列,因为它是在multicol*单列文档环境中使用的。到目前为止,它可以与blindtext甚至一些其他简单命令配合使用。

但现在我尝试将其插入\listoffigures为参数\sectiontest{},但它不起作用。

要么高度listoffigures似乎测量正确,但列表本身并未打印:

正确测量,无需打印清单

或者,如果我把展开后在前面(\sectiontest\expandafter{\listoffigures}),列表本身被打印出来,但是测量机制不起作用,因为没有\newcolumn插入,如果测量部分超出一半,就应该是这种情况\textheight

打印了清单但没有测量

我猜这与我自己的命令的嵌套结构有关,因为\testheight命令中有一个命令(它执行实际测量)\sectiontest。如果这样的命令\listoffigures需要多次编译运行作为参数,它们就不会以正确的方式展开。

我也尝试了一种解决方案(我通常更喜欢这种解决方案)以结合使用和命令expl3来解决问题,但没有成功。\exp_args:Nc/x/...\cs_new:Nn/...\listoffigures

对我来说,扩展仍然是 Latex 语法中最晦涩的部分——它expl3一点对我来说更清楚)或source2e

也许其他人知道该如何操作。这太好了。

这是我的 MWE,带有一大堆测试图片,以获得长篇大论;)

\documentclass[%
]{article}
\usepackage[T1]{fontenc}
\usepackage{noto}

\ExplSyntaxOn
% tests if the height of the text part tested is bigger or smaller than textheight
\NewDocumentCommand{\columntest}{}{%
    \int_compare:nNnTF {\int_to_arabic:n {\metaheight}} < {\int_to_arabic:n {\textheight/2}} {} {\newcolumn}
}
\NewDocumentCommand{\sectiontest}{m}{%
    \testheight{#1}\par
    \columntest
}
\ExplSyntaxOff
% command for measuring the height of a text part. The text part is the argument of the command
\newlength{\metaheight}
\newcommand{\testheight}[1]{%
    \settoheight{\metaheight}{%
        \parbox[b]{\linewidth}{\noindent#1}}%
    #1\par%
}
\usepackage{graphicx}
\usepackage{blindtext}
\usepackage{multicol}
\usepackage[showframe]{geometry}
\setlength\parindent{0pt}

\begin{document}
        \clearpage
    \begin{multicols*}{2}
        \sectiontest\expandafter{\listoffigures}
        \blindtext[3]
    \end{multicols*}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
\end{document}

编辑

也许我测量文本部分高度的方法\listoffigures完全错误。因此,我也愿意接受完全不同的想法来实现我的目标。

答案1

l3fp我使用LaTeX3 包解决了这个问题。这是一个简单的比较函数,它获取\pagetotal高度并将其与一半(在我的情况下,由于布局原因,\textheight略高于一半)进行比较。textheight

\newcolumn如果命令上方的部分跨越页面的中间,它会给我预期的输出以插入自动:

无新列

使用新列

以下是代码:

\documentclass[%
]{article}
\usepackage[T1]{fontenc}

\ExplSyntaxOn

\NewDocumentCommand{\columnheighttest}{}{
    \fp_compare:nNnTF {\pagetotal} > {\textheight/2.1} {\newcolumn} {}
}

\ExplSyntaxOff

\usepackage{graphicx}
\usepackage{blindtext}
\usepackage{multicol}
\usepackage[showframe]{geometry}
\setlength\parindent{0pt}

\usepackage{atbegshi,picture} %line at middle pf the page
\AtBeginShipout{%
    \AtBeginShipoutUpperLeft{%
        \put(0,\dimexpr-\topmargin-1in %
        -\headheight-\headsep
        -.5\textheight\relax){%
            \line(1,0){\paperwidth}%
        }%
    }%
}

\begin{document}
    \blindtext

    \clearpage
    \begin{multicols*}{2}
        \listoffigures
        
        \columnheighttest
        
        \blindtext[3]
    \end{multicols*}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel}
    \end{figure}
    
    \begin{figure}
        \includegraphics[width=.1\linewidth]{example-image}
        \caption{Ziel ist es, innerafrikanische Beziehungen und Vernetzungen der letzten 6.000 Jahre}
    \end{figure}

\end{document}

相关内容