我正在写一份文件,需要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
使用,\textbullet
则TS1
编码结果与
{\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
字体映射到它。