我想知道如何在 LaTeX 中替换字符串的部分内容。具体来说,我得到了一个测量值(如 3pt、10mm 等),我想删除该测量值的单位(因此 3pt-->3、10mm-->10 等)。我想要一个命令来执行此操作的原因如下代码所示:
\newsavebox{\mybox}
\sbox{\mybox}{Hello World!}
\newlength{\myboxw}
\settowidth{\myboxw}{\usebox{\mybox}}
\begin{picture}(\myboxw,\myboxw)
\end{picture}
基本上,我创建了一个savebox
名为 mybox 的容器。我将单词“Hello World”插入 mybox。我创建了一个新的长度,称为 myboxw。然后我获取 mybox 的宽度,并将其存储在 myboxw 中。然后我设置了一个正方形picture
环境,其尺寸与 myboxw 相对应。问题是 myboxw 返回的是“132.56pt”形式的值,而环境的输入picture
必须是无量纲的:\begin{picture}{132.56, 132.56}
。
所以,我需要一个命令来从字符串中去除测量单位。
答案1
内部 LaTeX 宏\strip@pt
返回不带单位的 pt 长度。例如,如果设置\myboxw
为 10 mm,则长度为 28.45274 pt,并且此代码
\makeatletter
\strip@pt\myboxw
\makeatother
只会输出 28.45274。因此您可以使用这个命令或定义自己的命令,例如:
\makeatletter
\newcommand*{\stripunit}[1]{\strip@pt#1}
\makeatother
\strip@pt
\the
在 dimen 寄存器上使用并剥离pt
,这就是为什么你没有得到 10 (mm),而是得到了相应的 pt 值(没有单位)。对我来说,这种转换为 pt 并剥离 pt 的做法似乎比仅仅进行字符串替换而不知道单位的情况下获得一些值要好。
\strip@pt
如果你查看 source2e.pdf 中的部分,你可以看到带有注释的源代码26.1 用户宏(部分章节)26. 选择新字体),您可以在命令提示符下输入以下命令打开它texdoc source2e
,或者从以下位置获取它氯化三乙胺。
答案2
ConTeXt 定义\withoutpt
如下:
{\catcode`\.=\@@other
\catcode`\p=\@@other
\catcode`\t=\@@other
\gdef\WITHOUTPT#1pt{#1}}
\def\withoutpt#1%
{\expandafter\WITHOUTPT#1}
(系统扩展.mkii)
因此您可以使用这个或类似的机制来删除“pt”后缀。
答案3
该picture
包允许您在命令的参数中使用 dimens picture
,因此\usepackage{picture}
应该足以解决您的问题。