检索字符的长度

检索字符的长度

我正在创建一个自定义命令,基本上打印一条水平线、一个字符和另一条水平线。代码如下

\newcommand{\breaknote}{\noindent\rule[.5ex]{.5\textwidth}{.4pt}\S\rule[.5ex]{.5\textwidth}{.4pt}}

显然,这超出了文本边距,引发了Overful \hbox错误。

问题是:有没有办法得到单身的字符,然后使用这个数字或将其存储在变量中,比如说\charwidth?我想要实现的是类似于

\newcommand{\breaknote}{\noindent\rule[.5ex]{.5\textwidth - .5\charwidth}{.4pt}\S\rule[.5ex]{.5\textwidth - .5\charwidth}{.4pt}}

这样就完美了。我知道我可以查看错误字符串并从那里获取实际的文本溢出(以 pts 为单位),从而读取字符长度,但我想知道是否有更清晰的方法。

答案1

\documentclass{article}
\usepackage{calc}
\usepackage{lipsum}
\usepackage[showframe]{geometry}
\newlength{\charwidth}
\setlength{\charwidth}{\widthof{\S}}
\newcommand{\breaknote}{\par\noindent\rule[.5ex]{.5\textwidth - .5\charwidth}{.4pt}\S\rule[.5ex]{.5\textwidth - .5\charwidth}{.4pt}\par}

\begin{document}
\lipsum[1]
\breaknote
\lipsum[2]

\end{document}

在此处输入图片描述

答案2

\newlength{\charwidth}
...
\settowidth{\charwidth}{\S}

或者如果calc使用包,它支持\widthof内部计算(\setlength\addtolength)。

答案3

对于手头的问题,还可以使用\hrulefill和的组合\raisebox

\documentclass{article}

\usepackage{lipsum}

\newcommand{\breaknote}{%
  \vspace*{-0.5ex}%
  \par\noindent\hrulefill\raisebox{-0.5ex}{\S}\hrulefill\par
  \vspace{0.5ex}%
}

\begin{document}

\breaknote

\lipsum[1]

\breaknote

\end{document}

在此处输入图片描述

相关内容