自定义 \textvisiblespace

自定义 \textvisiblespace

接受的答案是这个问题显示了的简洁重新定义\textvisiblespace,我喜欢使用它,因为它不会在数学模式下产生警告。

但是,我在等式中将其与等宽字体一起使用,结果看起来并不完美:符号离其右侧邻居太近了。这是一个 MWE:

\documentclass{article}

\newcommand\vartextvisiblespace[1][.3em]{%
  \mbox{\kern.1em\vrule height.3ex}%
  \vbox{\hrule width#1}%
  \hbox{\vrule height.3ex}
}

\begin{document}

A formula with visible space in it:
\begin{equation}
  s = \mathtt{a\vartextvisiblespace string\vartextvisiblespace sequence}
\end{equation}

\end{document}

有什么干净的方法可以让它看起来更好?

答案1

您正在构建的字形比等宽字体中的字母更宽;使用 0.5em 作为宽度并简化定义:

\documentclass{article}

\newcommand\vartextvisiblespace[1][.5em]{%
  \makebox[#1]{%
    \kern.07em
    \vrule height.3ex
    \hrulefill
    \vrule height.3ex
    \kern.07em
  }% <-- don't forget this one!
}

\begin{document}

A formula with visible space in it:

$s = \mathtt{a\vartextvisiblespace string\vartextvisiblespace sequence}$

\ttfamily
a\vartextvisiblespace\vartextvisiblespace\vartextvisiblespace a

abcde

\end{document}

在此处输入图片描述

您可以使用或类似工具来微调宽度\vartextvisiblespace[.3em]

答案2

只需在右侧添加一个小的\kern(相当于左侧):

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath

\newsavebox{\textvisiblespacebox}
\savebox{\textvisiblespacebox}{\texttt{a}}
\newcommand\vartextvisiblespace[1][\wd\textvisiblespacebox]{%
  \makebox[#1]{\kern.1em\rule{.4pt}{.3ex}%
  \hrulefill%
  \rule{.4pt}{.3ex}\kern.1em}%
}

\newcommand{\x}{\vartextvisiblespace}% For ease-of-use
\begin{document}

\begin{align*}
  a &= \mathtt{a\x string\x sequence} \\
  b &= \mathtt{a\x\x\x\x\x\x\x\x sequence} \\
  c &= \mathtt{a\x\x\x\x\x\x\x\x\x\x\x\x\x\x\x e}
\end{align*}

\end{document}

我还更新了 的构造,\vartextvisiblespace使其更符合 LaTeX2e 风格。它测量普通打字机字体字符的宽度,并使用它来确定可见空间的框宽度。

相关内容