是否有一个 TeX 命令可以返回给定文本的宽度长度值,以便我可以直接将结果用作另一个命令的长度参数?
我的意思是,我想要一个命令\getWidth{my text}
并希望直接使用结果作为第一个参数\parbox
:
\parbox{\getWidth{my text}}{my foo\\bar text}
答案1
使用calc
包(\usepackage{calc}
):
\parbox{\widthof{my text}}{...}
“仅原始”的方法是
\newdimen\mywidth
\setbox0=\hbox{<text to measure>}
\mywidth=\wd0
然后使用\mywidth
。
答案2
我喜欢以更普遍的方式回答这个问题,以便它对更广泛的人群有用。
以下宏允许存储给定内容的宽度、高度(基线以上的材料)和深度(基线以下的材料)。
\settowidth{\somelength}{<content>}
\settodepth{\somelength}{<content>}
\settoheight{\somelength}{<content>}
该calc
包还提供了一个用于总高度(高度+深度)的:
\settototalheight{\somelength}{<content>}
也
\widthof{<content>}
\heightof{<content>}
\depthof{<content>}
\totalheightof{<content>}
可直接在\setlength
或内部使用\addtolength
。
如果您需要相同内容的多个维度,您也可以将其存储在框寄存器中并直接使用其维度(上述宏也在内部执行此操作)。这些是维度表达式,可以以因子作为前缀,例如.5\wd\mybox
宽度的一半。
\newsavebox\mybox
\sbox{\mybox}{<content>}
\wd\mybox % width
\ht\mybox % height
\dp\mybox % depth
要得到总高度,您需要将\ht\mybox
和\dp\mybox
相加。
答案3
这是可以做到的没有包裹calc
\documentclass{article}
\begin{document}
\newlength{\myl}
\settowidth{\myl}{test text}
\the\myl
\end{document}
\the\myl
将打印出值~37pt。
答案4
这是一个选项pgf
% !Mode:: "TeX:UTF-8"
\documentclass{article}
\usepackage{pgf}
\begin{document}
\noindent
\pgfmathwidth{"length you wanted"}
\parbox{\pgfmathresult pt}{the text you want to print out}
\end{document}
返回\pgfmathwidth
双引号中包含的文本的宽度\pgfmathresult
,注意结果\pgfmathwidth
始终为点和仅数值提供
顺便说一句,\pgfmathwidth
它也适用于汉字。