pdflatex 缩放逐字环境中数学符号 (∃, ∀) 的打字机字体

pdflatex 缩放逐字环境中数学符号 (∃, ∀) 的打字机字体

我想在缩放的逐字环境中使用数学符号(例如 ∀ 和 ∃),使用打字机字体。适合数学符号 (∀、∃、→) 的打字机字体,例如在逐字环境中不适用于使用\scalefont来自scalefnt包的缩放逐字环境。而且我还想坚持使用 pdflatex(而不是 xetex)。

以下是基于此答案的测试用例:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pmboxdraw}
\usepackage{newunicodechar}
\usepackage{fancyvrb}
\usepackage{scalefnt}

\DeclareFontFamily{U}{cmtex}{}
\DeclareFontShape{U}{cmtex}{m}{n}{
 <-> cmtex10
}{}
\newcommand{\cmtex}[1]{{%
  \usefont{U}{cmtex}{m}{n}\symbol{#1}%
}}

\newcommand{\ttexists}{\cmtex{"15}}
\newcommand{\ttforall}{\cmtex{"14}}

\newunicodechar{∃}{\ifmmode\exists\else\ttexists\fi}
\newunicodechar{∀}{\ifmmode\forall\else\ttforall\fi}

\begin{SaveVerbatim}{AlignTest}
│∃∀∃∀∃∀∃∀∃∀∃∀∃∀∃∀│
│1234567812345678│
\end{SaveVerbatim}

\begin{document}

\UseVerbatim{AlignTest}

{\scalefont{0.75}
\UseVerbatim{AlignTest}
}

\end{document}

编译此程序时,我收到警告,例如:

LaTeX Font Warning: Font shape `T1/cmr/m/n' in size <7.5> not available
(Font)              size <7> substituted on input line 32.

以下是我得到的结果:

从测试用例获得的输出

仅当字体缩放时才会显示错误对齐。使用\makebox可以解决对齐问题:

\newcommand{\ttexists}{\makebox[0pt][l]{\cmtex{"15}} }
\newcommand{\ttforall}{\makebox[0pt][l]{\cmtex{"14}} }

但这可能意味着角色之间的距离比预期的要近,因为它们一开始就没有正确的尺寸。

如何才能正确解决字体大小问题(以及由此产生的对齐问题)?

答案1

您可以使用软件包解决主要问题fix-cm,使字体完全可缩放。但是,标准打字机字体使用的光学缩放会导致固定缩放会导致字符略窄。通过将字符装箱cmtex,使字符与 中的字符一样宽并不困难。cmtt

\RequirePackage{fix-cm}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pmboxdraw}
\usepackage{newunicodechar}
\usepackage{fancyvrb}
\usepackage{scalefnt}

\DeclareFontFamily{U}{cmtex}{}
\DeclareFontShape{U}{cmtex}{m}{n}{
 <-> cmtex10
}{}
\newcommand{\cmtex}[1]{{%
  \ttfamily\makebox[0.5em]{%
    \usefont{U}{cmtex}{m}{n}\symbol{#1}%
  }%
}}

\newcommand{\ttexists}{\cmtex{"15}}
\newcommand{\ttforall}{\cmtex{"14}}

\newunicodechar{∃}{\ifmmode\exists\else\ttexists\fi}
\newunicodechar{∀}{\ifmmode\forall\else\ttforall\fi}

\begin{SaveVerbatim}{AlignTest}
│∃∀∃∀∃∀∃∀∃∀∃∀∃∀∃∀│
│1234567812345678│
\end{SaveVerbatim}

\begin{document}

\UseVerbatim{AlignTest}

{\scalefont{0.75}%
\UseVerbatim{AlignTest}
}

\end{document}

在此处输入图片描述

在 Computer Modern Mono 中,em 是字母宽度的两倍,因此我首先切换到它并使用 em 作为框宽度。

如果你使用\cmtex其他等宽字体,为了安全起见,你可以这样做

\makebox[\fontcharwd\font`0]{...}

这将精确使用等宽字体中数字/字母的宽度。

相关内容