[教学]how to use external fonts in xetex

OOo,TeX,KO,ABI,GIMP,Picasa,ProE,QCAD,Inkscape,Kicad,Eagle
ltkun
帖子: 1340
注册时间: 2006-01-10 19:09

[教学]how to use external fonts in xetex

#1

帖子 ltkun » 2007-06-20 18:19

昨天正好看到一篇文章内提到XeTeX可以使用系统自带的字体而不必生成tfm、type1字体,就安装了XeTeX在机器上试试。以前在latex中使用中文是一件比较麻烦的事情,不仅要生成各种编码的字体,还要注意tex文件的编码到底是gbk的还是utf8的等等诸如此类的问题。现在XeTeX为我们解决了这一难题,Ubuntu gutsy 自带的texlive2007就包含了XeTeX。网上这方面的文章比较少,我把我的安装方法和如何使用系统自带的字体来生成pdf文件简单的叙述一下。
安装texlive2007,gutsy上把tetex-bin作为虚拟包,要使用tex的话只能安装texlive了。因为我texlive部分是以前完成的所以具体安装哪些包也不是很清楚,一般情况可以试试
sudo apt-get install texlive texlive-XeTeX lmodern

安装好以后就可以试试编译一下tex的文件了
随便建立一个a.tex文件,内容如下:
\documentclass[12pt,a4paper]{article}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{xltxtra}
\setromanfont{AR PL ShanHeiSun Uni}
\begin{document}
\XeTeX 可以使用系统自带的字体,而不需要再另外生成。
\end{document}

编译这个文件用 xelatex a.tex 如果成功自动生成a.pdf文件,看一下能不能显示中文吧。
解释一下,fontspec这个包提供了XeteX能使用系统自带字体的功能,具体用法可以参考fontspec手册:/usr/share/doc/texlive-XeTeX/xelatex/fontspec/fontspec.pdf,xunicode 这个包在这里可以去掉因为没有用到一些复杂的字符,不过fontspec的手册强烈建议使用所以就放在里面了,xltxtra这个包提供了LaTeX没有的宏包,比如\XeTeX。
\setromanfont{AR PL ShanHeiSun Uni}正文的字体使用系统自带的Uming字体。如果你安装了其他中文字体的话,可以通过fc-list命令来查看所安装字体的名字,第一列就是。

如果你的系统里面没有安装其他字体但是还是想用的话,XeTeX提供了一种使用外部字体的方法,这是一件很令人兴奋的事情。看一下如何做到的。fontspec包提供了一个ExternalLocation的选项允许你使用外部的字体:
\fontspec[ExternalLocation=/media/hda5/windows/Fonts/]{simli.ttf}
修改一下上面的例子

\documentclass[12pt,a4paper]{article}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{xltxtra}
\newcommand\lishu{\fontspec[ExternalLocation=/media/hda5/windows/Fonts/]{simli.ttf}}
\newcommand\hei{\fontspec[ExternalLocation=/media/hda5/windows/Fonts/]{simhei.ttf}}
\newcommand\fang{\fontspec[ExternalLocation=/media/hda5/windows/Fonts/]{simfang.ttf}}
\newcommand\kai{\fontspec[ExternalLocation=/media/hda5/windows/Fonts/]{simkai.ttf}}
\setromanfont{AR PL ShanHeiSun Uni}
\begin{document}
\XeTeX 可以使用系统自带的字体,而不需要再另外生成。

\lishu \XeTeX 可以使用系统自带的字体,而不需要再另外生成。

\hei \XeTeX 可以使用系统自带的字体,而不需要再另外生成。

\fang \XeTeX 可以使用系统自带的字体,而不需要再另外生成。

\kai \XeTeX 可以使用系统自带的字体,而不需要再另外生成。

\end{document}

你也可以使用这个命令来编译得到pdf
xelatex -no-pdf a.tex
xdvipdfmx a.xdv
估计两者的差别在于产生的pdf能不能复制粘贴,没有测试过因为身边只有xpdf。
当然还有一些中文特有的格式比如缩进断行不知道XeTeX支持的如何,希望大家继续深入研究一下。
附件
xetex.png
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#2

帖子 xiechy » 2007-06-20 18:54

good!
不过,好像记得xetex的pdf没有嵌入字体,有可能别处看不到。
ltkun
帖子: 1340
注册时间: 2006-01-10 19:09

#3

帖子 ltkun » 2007-06-21 12:27

大部分的pdf都不内嵌字体的
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#4

帖子 xiechy » 2007-06-26 2:14

内嵌了,可以在pdf信息处看到,我的问题是acroread在gutsy下有点小bug,解决了,不是xetex的问题。
以前就觉得,虽然type1的3次曲线,而ttf只是二次,但我们常用的字体都是从ttf生成的,所以所谓的type1字体更优美是假牙~
ltkun
帖子: 1340
注册时间: 2006-01-10 19:09

#5

帖子 ltkun » 2007-06-26 6:48

噢~机器慢从来只用xpdf的~可是就几十k几百k的文件也内嵌了字体
archlinux
帖子: 29
注册时间: 2006-05-08 8:19

#6

帖子 archlinux » 2007-06-26 12:54

中文首行缩进不行!
archlinux
帖子: 29
注册时间: 2006-05-08 8:19

#7

帖子 archlinux » 2007-06-26 12:54

另外,两种方法(直接用xelatex生成和xdv转成)生成的中文pdf都可以复制粘贴!!!
ltkun
帖子: 1340
注册时间: 2006-01-10 19:09

#8

帖子 ltkun » 2007-06-26 14:16

\usepackage{indentfirst}

最新的TexLive已经不包含这个包了,如果找不到indentfirst包,可以在导言区输入下列命令代替:

\makeatletter
\let\@afterindentfalse\@afterindenttrue
\@afterindenttrue
\makeatother
\setlength{\parindent}{2em}%中文缩进两个汉字位
http://www.cnblogs.com/agateriver/archi ... 06044.html
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#9

帖子 xiechy » 2007-06-26 14:54

包含的。我gutsy texlive2007.有
ltkun
帖子: 1340
注册时间: 2006-01-10 19:09

#10

帖子 ltkun » 2007-06-26 19:36

用indentfirst我只缩进一个半字符?必须手动设立parindent
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15

#11

帖子 iblicf » 2007-07-31 9:50

woo woo , xetex xetex .... really convenience : )
yuanyelele
帖子: 18
注册时间: 2007-01-23 0:29
来自: 北京

#12

帖子 yuanyelele » 2007-10-26 0:03

请问,为什么我用了这两个package以后,数学符号显示不出来呢?
这样显示不出符号:

代码: 全选

\documentclass[12pt,a4paper]{article}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{xltxtra}
\setromanfont{WenQuanYi Zen Hei}
\begin{document}
无穷 infty $\infty$
\end{document}
这样可以显示符号,却显示不了中文:

代码: 全选

\documentclass[12pt,a4paper]{article}
\begin{document}
无穷 infty $\infty$
\end{document}
ltkun
帖子: 1340
注册时间: 2006-01-10 19:09

#13

帖子 ltkun » 2007-11-06 16:23

\usepackage[cm-default]{fontspec}
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#14

帖子 eexpress » 2007-11-09 0:00

☎ xelatex tmp.tex
This is XeTeXk, Version 3.141592-2.2-0.996 (Web2C 7.5.6)
%&-line parsing enabled.
entering extended mode
(./tmp.tex
LaTeX2e <2005/12/01>
Babel <v3.8h> and hyphenation patterns for english, usenglishmax, dumylang, noh
yphenation, loaded.
(/usr/share/texmf-texlive/tex/latex/base/article.cls
Document Class: article 2005/09/16 v1.4f Standard LaTeX document class
(/usr/share/texmf-texlive/tex/latex/base/size12.clo))
(/usr/share/texmf-texlive/tex/xelatex/fontspec/fontspec.sty
(/usr/share/texmf-texlive/tex/generic/ifxetex/ifxetex.sty)
(/usr/share/texmf-texlive/tex/latex/tools/calc.sty)

! LaTeX Error: File `xkeyval.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

Enter file name:

LaTeX Warning: You have requested, on input line 54, version
`2005/05/07' of package xkeyval,
but only version
`'
is available.

(/usr/share/texmf/tex/latex/lm/lmodern.sty)
(/usr/share/texmf-texlive/tex/latex/base/fontenc.sty
(/usr/share/texmf-texlive/tex/xelatex/euenc/eu1enc.def)
(/usr/share/texmf-texlive/tex/xelatex/euenc/lm/eu1lmr.fd))
! Undefined control sequence.
l.518 \define@key
[zf]{prepreparse}{ExternalLocation}[]{%
? q
OK, entering \batchmode

可以了
附件
screenshot-2007-11-09-01-11-49.png
● 鸣学
rocbaby
帖子: 33
注册时间: 2007-12-10 1:28

#15

帖子 rocbaby » 2008-03-21 15:41

楼主的方法无误。可是使用wenquanyi bitmap song字体似乎出现找不到字体的错误。wenquanyi zen hei没有问题。
实验了一些其他字体,个人感觉是字体文件必须是ttf的才能支持,而bitmap song是pcf的,似乎不能直接使用。望哪位大虾给出简单点的解决办法?
附件
Screenshot-emacs@roc.png
回复