Pages

Thursday, July 18, 2013

在Ubuntu中安装使用TexLive2013并为XeTeX设置中文字体

前天在Ubuntu 12.04下,使用网络安装的方法安装了TeX Live 2013。XeTeX最近成为中文LaTeX排版的新趋势,我也想尝试一下,因此卸载了系统源里的2012版,并安装2013版。因为XeTeX还没有正式发布,目前正在活跃的开发中,这一年时间肯定修正了不少bug,值得更新。

在线安装TeX Live 2013

下载安装文件

下载地址:http://www.tug.org/texlive/acquire-netinstall.html

安装

(官方中文指南下载:TeX Live指南

下载安装程序后,按照这个 Quick Install 就可以方便的安装了。这里把主要过程简记如下:

  1. 解压缩: tar xzf install-tl-unx.tar.gz
  2. CTAN网站选择一个离你近、速度快的CTAN的镜像站。我选的是ustc的HTTP源:http://mirrors.ustc.edu.cn/CTAN/,我这边ustc的开源软件源速度一直不错。
  3. 运行安装程序,并设置上一步选择的源,加快下载速度
    • 文本界面:./install-tl --location http://mirrors.ustc.edu.cn/CTAN/
    • 图形界面:./install-tl -gui --location http://mirrors.ustc.edu.cn/CTAN/。需要注意,使用图形界面需要安装perl-tk包(sudo apt-get install perl-tk),否则无法启动图形界面。
  4. 启动安装程序后有个选择安装位置的选项,我选的是/opt/texlive/2013(我对/opt/目录拥有写入权限,如果你对要安装的目录没有定稿权限,需要以root身份sudo ./install-tl 参数重新运行安装程序),TEXMFHOME变量选的是~/.texlive/texmf
  5. 我使用的是文本界面。写这篇文章时我已经安装好了,所以无法截图。需要注意的是install scheme,如果是新手,选full scheme可以省去很多麻烦。如果是LaTeX大神级的,那估计也不用看我的文章了=_=。我选的是custom selections of collections。然后进入customizing installation collections选择要安装的collection。这提供了比scheme更细的方法控制安装哪些包。选的越多需要的硬盘空间越大,全选的话需要3.9G的样子,我的选择需要1.9G,其中的字体和文档都是大部头,可以适当取消几个。
  6. 然后就是漫长的等待,我用了2个半小时安装完(事后看的,做完上面的选择就睡觉去了=_=)

安装后续处理

配置PATH环境变量

使用bash或者zsh的,在~/.profile里添加以下内容

PATH=$PATH:/opt/texlive/2013/bin/x86_64-linux export PATH

或者在安装过程中选择了在系统目录创建链接。如果没选,也可以运行tlmgr -gui,从菜单里选择创建链接。

为XeTeX安装中文字体

字体从哪儿来

  • 从Windows系统的Fonts目录复制: 用资源管理器打开C:\Windows\Fonts,以详细方式查看,点上方的Designed for(英文系统)排序,向下拉找到值为Han (Simplified)的字体,复制下来,送到Linux的~/.fonts目录。
  • Ubuntu源里的中文字体:文鼎、文泉驿(sudo apt-get install ttf-wqy-zenhei ttf-wqy-microhei xfonts-wqy fonts-arphic-ukai fonts-arphic-uming)。如果用那些版权字体不舒服,只用这两种也足够了。
  • Adobe 中文字体,好像是Adobe Reader自带的中文字体,具体不了解,可以免费获得。

安装字体

把获得的各种字体放到~/.fonts目录下。然后运行fc-cache -fv`更新系统字体缓存。

查看系统字体的名称

使用fc-list :lang=zh family style file spacing 命令查看安装的中文字体。其中字体的名称可能有英文、简中、繁中等多个,使用其中哪一个都行(应该是的)。可以使用下面的命令把这个列表保存到文件chinesefontname中,并对字体名进行排序

 fc-list :lang=zh family style file spacing | awk -F: 'BEGIN {OFS=" : "} {print $2 , $1 , $3 }' | sort > chinesefontname

把上面命令中的:lang=zh去掉可以查看系统中的所有字体。

让XeTeX找到TeX Live安装的字体

Linux系统下,需要配置一下XeTeX才能找到随TeX Live安装的字体。

  • 复制字体配置文件
cp /opt/texlive/2013/texmf-var/fonts/conf/texlive-fontconfig.conf ~/.fonts.conf  # 个人使用
# 或者
sudo cp /opt/texlive/2013/texmf-var/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf # 系统所有用户可用
  • 更新字体缓存
fc-cache -fv # 安装在~/.fonts.conf
# 或者
fc-cache -fsv # 安装在/etc/fonts/

注意一点,如果你的~/.fonts.conf中原来有内容,比如我就使用文泉驿Fontconfig Designer(视觉习惯) 生成过这个文件,这是个很好用的工具,不想丢掉它生成的内容,打开这两个文件比较一下,发现两个的内容可以合并。把texlive-fontconfig.conf处在fontconfig标签之间的三行

  <dir>/opt/texlive/2013/texmf-dist/fonts/opentype</dir>
  <dir>/opt/texlive/2013/texmf-dist/fonts/truetype</dir>
  <dir>/opt/texlive/2013/texmf-dist/fonts/type1</dir>

复制到~/.fonts.conf<fontconfig>标签的下一行即可。合并后的~/.fonts.conf的部分内容如下(前一个注释是我自己加的):

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- manually copied from /opt/texlive/2013/texmf-var/fonts/conf/texlive-fontconfig.conf used by XeTeX -->
  <dir>/opt/texlive/2013/texmf-dist/fonts/opentype</dir>
  <dir>/opt/texlive/2013/texmf-dist/fonts/truetype</dir>
  <dir>/opt/texlive/2013/texmf-dist/fonts/type1</dir>

<!-- created by WenQuanYi FcDesigner v0.5 -->
<match>
    <test name="family"><string>sans-serif</string></test>
    <edit name="family" mode="prepend" binding="strong">
......

在XeTeX中使用系统任意字体

示例如下

% !TEX program = xelatex

\documentclass[12pt,a4paper]{article}

\usepackage{ctex}
\usepackage{fontspec}

% 微软雅黑 \yahei
\setCJKfamilyfont{MSYAHEI}{微软雅黑}
\newcommand{\yahei}{\CJKfamily{MSYAHEI}}

% 楷体 \kai
\setCJKfamilyfont{KAITI}{楷体}
\newcommand{\kai}{\CJKfamily{KAITI}}

\setmainfont[BoldFont=黑体,ItalicFont=楷体]{宋体}
\setsansfont[BoldFont=黑体]{楷体}
\setmonofont{文泉驿等宽微米黑}

\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt

\begin{document}
\zihao{-4}
中文字体!(默认宋体) \\
{\yahei  微软雅黑字体} \\
\kai{楷体。两小儿问孔子} \\
\youyuan{xeCJK 系统定义好的幼圆字体}

\textsf{无衬线字体(楷体)} \\ 
\textbf{\textsf{无衬线字体粗体(黑体)}} \\
\texttt{打字机字体文(泉驿等宽微米黑)} \\

\end{document}

一定要使用xelatex编译,使用xetex不行。

输出果与预期稍有不同,\textsf好像把字体变成了仿宋(从输出的pdf文件看),原因不明。

The font "[SIMKAI.TTF]" cannot be found.

完整的错误如下

 ! fontspec error: "font-not-found"  
 !   
 ! The font "[SIMKAI.TTF]" cannot be found.  

原因是xeCJK配置文件里写的字体文件名与你实际用的文件名不一样,所以就看不到字体了。修正方法是修改texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def文件,把里面的字体改成你在fc-list看到的正确字体,我修改的结果如下(把所有字体都改成了中文):

% ctex-xecjk-winfonts.def: Windows  xeCJK 字体设置,默认为六种中易字体
% vim:ft=tex

\setCJKmainfont[BoldFont={黑体},ItalicFont={楷体}]
  {宋体}
\setCJKsansfont{黑体}
\setCJKmonofont{仿宋}

> Blockquote

\setCJKfamilyfont{zhsong}{宋体}
\setCJKfamilyfont{zhhei}{黑体}
\setCJKfamilyfont{zhkai}{楷体}
\setCJKfamilyfont{zhfs}{仿宋}
\setCJKfamilyfont{zhli}{隶书}
\setCJKfamilyfont{zhyou}{幼圆}

\newcommand*{\songti}{\CJKfamily{zhsong}} % 宋体
\newcommand*{\heiti}{\CJKfamily{zhhei}}   % 黑体
\newcommand*{\kaishu}{\CJKfamily{zhkai}}  % 楷书
\newcommand*{\fangsong}{\CJKfamily{zhfs}} % 仿宋
\newcommand*{\lishu}{\CJKfamily{zhli}}    % 隶书
\newcommand*{\youyuan}{\CJKfamily{zhyou}} % 幼圆

\endinput

从这里可以看出,xeCJK为我们提供了6个预定义的字体命令:\songti, \heiti, \kaishu, \fangsong, \lishu, \youyuan,可以直接使用。1

No comments:

Post a Comment