如何创建列出其自身物理尺寸的文本?

如何创建列出其自身物理尺寸的文本?

与 XKCD 688 类似,我正在尝试制作一个以文字描述其自身内容的乳胶文档:

XKCD 688

具体来说,我希望能够让文本列出其自己的物理尺寸。例如:

此行宽 5.812 英寸,基线距页面顶部 4.588 英寸。

我理解这通常是不可能的,因为维度可能递归地依赖于文本本身,甚至可能根本不会收敛。

但是,如果所有尺寸都使用固定数量的等宽数字列出,则尺寸值将不会对布局产生任何影响,至少在原则上是可能的。

如何创建列出其自身物理尺寸的文本?

答案1

至少对于一部分文本,您可以将其存储在一个框中并访问该框的几何属性。

为了记住 tex 运行之间的属性并使其在定义框时可用,您可以滥用该totcount包。

最后但同样重要的一点是,\usepackage{printlen}这是一种以您喜欢的单位打印值的便捷方法。

下面的例子需要 3 次运行才能收敛。

\documentclass{article}

\usepackage{printlen}

\usepackage{totcount}
\newtotcounter{mywidth}
\newtotcounter{myheight}

\begin{document}

\newsavebox{\mybox}
\savebox{\mybox}{\parbox{\textwidth}{This line is \uselengthunit{mm}\printlength{\totvalue{mywidth}} wide, and has a height of \uselengthunit{mm}\printlength{\totvalue{myheight}} and the line needs to be longer.}}

\usebox{\mybox}

\setcounter{mywidth}{\wd\mybox}
\setcounter{myheight}{\ht\mybox}
\addtocounter{myheight}{\dp\mybox}

\end{document}

enter image description here

答案2

这是一个zref解决方案,只需要运行两次,但它目前的缺点是盒子名称是固定的。

\documentclass{article}

\usepackage[user]{zref}
\usepackage{xprintlen}

\newsavebox{\mybox}%


\makeatletter
% Define some properties to store
\zref@newprop{width}{\the\wd\mybox}% This is a little bit unfortunate
\zref@newprop{height}{\the\dimexpr\ht\mybox+\dp\mybox}
% Add the properties to the main list
\zref@addprops{main}{width,height}

% Define two expandable properties extraction commands. 
\newcommand{\extractwidth}[1]{%
  \zref@ifrefundefined{#1}{0pt}{%
    \zref@extract{#1}{width}%
  }%
}
\newcommand{\extractheight}[1]{%
  \zref@ifrefundefined{#1}{0pt}{%
    \zref@extract{#1}{height}%
  }%
}
\makeatother

\begin{document}

\savebox{\mybox}{\parbox{\textwidth}{This line is \printlen{\extractwidth{boxlabel}} wide, and has a height of \printlen{\extractheight{boxlabel}} and the line needs to be longer.}}\zlabel{boxlabel}

\usebox{\mybox}


\savebox{\mybox}{\rule{10cm}{5cm}}\zlabel{rulelabel}

\usebox{\mybox}

\printlen{\extractwidth{rulelabel}} and \printlen{\extractheight{rulelabel}}



\end{document}

enter image description here

相关内容