![如何从 \listoffigures 测量预期输出的高度](https://linux22.com/image/466165/%E5%A6%82%E4%BD%95%E4%BB%8E%20%5Clistoffigures%20%E6%B5%8B%E9%87%8F%E9%A2%84%E6%9C%9F%E8%BE%93%E5%87%BA%E7%9A%84%E9%AB%98%E5%BA%A6.png)
我定义了一个新命令 \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}