只是为了好玩:全局用一个字形替换另一个字形

只是为了好玩:全局用一个字形替换另一个字形

以前,当我使用所见即所得的文字处理器时,我会拿出一份完成的文档,然后使用“查找-替换”将所有“。”变成小笑脸。其实没有人会注意到这个区别,但如果你用一台好的打印机打印出来并仔细观察,就会发现它的存在。至少对我来说,每一句话都稍微更快乐一些。

我有兴趣在 LaTeX 中重复此操作。我最初的尝试是:

\documentclass{article}

\usepackage{wasysym}% For the smiley character
\usepackage{lipsum}

\catcode`\.=\active% Make . an active character
\def.{{\tiny\blacksmiley{}}}% Make . expand to a black smiley

\begin{document}

\section{A Section}
\subsection{Stuff}

Some text. A number: $3.14$. \lipsum[1]

\end{document}

结果很一般。小笑脸太大了,当然会保留\tiny在文本中间\tiny。出现在小节标签(1.1 Stuff)中的小数点和 Lipsum 文本中的句号也保留了正常的句号。

似乎更好的方法是定义一个自定义字体,其中句号字符定义为黑色笑脸。有没有办法在 LaTeX 中做到这一点 - 即“加载此字体,然后通过将句号字符重新定义为另一个字体中此黑色笑脸字符的缩小版本来修改它”?

在这个相关问题中[将一种字体中的字形替换为另一种字体中的字形],提问者希望用单层版本替换双层“a”和“g”。评论表明这是可能的,但必须重新定义字距,这将是一个巨大的麻烦。这种情况有点不同,因为替换字符应该具有与原始字符相同的大小和形状 - 即,原始句号的字距对于替换笑脸来说非常合适。

答案1

使.活性物质强烈不是推荐,因为它会破坏您指定十进制长度的能力,例如1.5pt,或其他十进制参数。

给出免责声明,该scalerel软件包允许您将一个对象缩放到另一个对象的垂直范围。在本例中,我将缩放到\blacksmiley的垂直范围\svdot,这是句点的保存副本。

在我的 MWE 中,我在末尾打印出一个\svdot,以便进行比较。[请注意,我\lipsum从我的 MWE 中删除了,因为它是在.激活之前定义的,因此保留了它的非活动期]

\documentclass{article}

\usepackage{wasysym}% For the smiley character
\usepackage{scalerel}

\let\svdot.
\catcode`\.=\active% Make . an active character
\def.{\scalerel*{$\blacksmiley$}{\svdot}}% Make . expand to a black smiley

\begin{document}
\section{A Section}
\subsection{Stuff}
Some text. A number: $3.14$.\svdot
\end{document}

在此处输入图片描述

相关内容