LaTeX 中的字符串替换

LaTeX 中的字符串替换

我想知道如何在 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}应该足以解决您的问题。

相关内容