使用 helvet 字体时,textcomp 会使 \textbullet 变小

使用 helvet 字体时,textcomp 会使 \textbullet 变小

我正在写一份文件,需要helvet,为了获取欧元符号,我现在正在尝试加载该textcomp包。

但是这个包有一个奇怪的副作用,就是使 生成的符号\textbullet(例如,在itemize环境中使用时)变小一点。我可以忍受,但我更喜欢稍大一点的项目符号,所以我想知道是否有一种简单的加载方法textcomp,但不改变项目符号的大小?

一个小例子来说明问题

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[scaled]{helvet}
\renewcommand{\familydefault}{\sfdefault}
% Uncomment the following line to see the problem 
%\usepackage{textcomp}

\begin{document}
\begin{itemize}
\item One
\item Two
\end{itemize}
\end{document}

答案1

首先,如果你真的想要起源\textbullet

\DeclareTextSymbolDefault{\textbullet}{OMS}

第二,哪个更好?我知道这很主观,但我只是想解释一下该怎么textcomp做。

使用textcomp包,文本符号将以新TS1编码重新声明,而不是 Knuth 的OMS编码(为 origin CM 字体设计)。它适用于 8 位字体(256 个字形)。

如果OMS对 使用编码\textbullet,则\textbullet

{\usefont{OMS}{phv}{m}{n}\symbol{15}}

omsphv.fd你会发现

\DeclareFontShape{OMS}{phv}{m}{n}
   {<-> ssub * cmsy/m/n}{}

即使用Computer Modern Symbol字体(cmsy)。实际上,它不太适合Adobe Helvetica字体(phv系列)。

如果textcomp使用,\textbulletTS1编码结果与

{\usefont{TS1}{phv}{m}{n}\symbol{136}}

ts1phv.fd你会发现

\DeclareFontShape{TS1}{phv}{m}{n}{
   <-> \Hv@@scale phvr8c
}{}

那才是真正的 Helvetica。(实际上在大多数 TeX 发行版中都是 Nimbus Sans)

答案2

不要使用textcomp来表示欧元符号。有eurosym,它提供了官方符号。

utf8如果你想直接用 Unicode 字符和选项输入欧元符号inputenc,你可以这样写

\usepackage{eurosym,newunicodechar}
\newunicodechar{€}{\officialeuro}

不过,你无法在 PDF 中找到。为此,你需要添加一些魔法:

\immediate\pdfobj stream {
  /CIDInit /ProcSet findresource begin
  12 dict begin
  begincmap
  /CIDSystemInfo
  << /Registry (TeX)
  /Ordering (Euro)
  /Supplement 0
  >> def
  /CMapName /TeX-Euro-0 def
  /CMapType 2 def
  1 begincodespacerange
  <00> <FF>
  endcodespacerange
  1 beginbfchar
  <65> <20AC>
  endbfchar
  endcmap
  CMapName currentdict /CMap defineresource pop
  end
  end
}
\begingroup
\edef\next#1#2{%
  \noexpand\fontseries{#1}\noexpand\fontshape{#2}\noexpand\selectfont
  \pdffontattr\font{/ToUnicode \the\pdflastobj\space 0 R}}
\fontencoding{U}\fontfamily{eurosym}%
\next{m}{n}\next{m}{sl}\next{m}{ol}
\next{bx}{n}\next{bx}{sl}\next{bx}{sl}
\endgroup

基本上,这会添加一个 CMAP 资源并将所有eurosym字体映射到它。

相关内容