Latex使用CJK包添加字体
最近写论文时有个中文期刊提供的LaTeX模板使用CJK宏包,大致是这样的:
\documentclass{article}
\usepackage{CJK}
\begin{document}
\begin{CJK*}{GBK}{song}
你好!
...
\end{CJK*}
\end{document}
用pdflatex编译一直报错,类似如下的错误:
kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+120/600 --dpi 720 gbk40
mktexpk: don't know how to create bitmap font for gbk40.
kpathsea: Appending font creation commands to missfont.log.
感觉是缺少字体,但是又不知道这个gbk40是个什么东西。查了好久才知道是缺少GBK编码的song字体(注意不是宋体,是song体,这个看到后面就会明白)。而且很多资料都建议使用xelatex,因为它可以使用系统字体,pdflatex+CJK系统已经接近淘汰了。然而毕竟是论文投稿,为了保险起见,希望还是可以使用pdflatex编译通过。pdflatex跟xelatex编译出来的文件可能格式上略有不同,这个是我以前遇到过的。再次查阅好久,很多字体生成教程已经很久远了,大多是零几年的教程,gbkfont之类的软件都不知道上哪里找。最后发现知乎上有一篇文章步骤比较完整,而且版本也比较新。经过尝试,还是踩了几个坑。这里详细记录一下。
文本编码
针对中文,CJK规定了四种编码:UTF8(C70), GBK(C19), GB(C10), Bg5(C00)。至于用处,那篇文章中有介绍:
它(CJK宏包)发现“您”,它就会把字体设置为 gbksong51, 然后取里面的第115个字符。为了达到这个目的,它把我们的汉字
您变成了\C19/song/m/n/10/51 s,\C19/song/m/n/10/51表示用 GBK 编码(C19) 的 song 体,粗细为 medium(m), 而不是 bold, 形状为upright(n), 而不是 italic, 大小是 10pt, 子集号码 51. 这个描述会被C19song.fd这个字体描述文件映射为gbksong51. 因为C19song.fd里有这样一行:\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * gbksong}{}
...
到这里就可以了,后边的用处不大,可以省略。
操作
1.安装Fontforge软件。
2.创建工作目录
mkdir font_gen,随便起个名字,作为工作目录。将需要安装的字体复制到这个目录。如:FZSong.ttf。
3.复制相关文件
在texlive的安装目录找到这几个文件:subfonts.pe,Unicode.sfd,UGBK.sfd并复制到上面那个目录。在texlive2019版本,这三个文件分别在:
./texmf-dist/source/latex/cjk/utils/subfonts/subfonts.pe
./texmf-dist/fonts/sfd/ttf2pk/Unicode.sfd
./texmf-dist/fonts/sfd/ttf2pk/UGBK.sfd
使用find命令很方便就能找到。
4.建立字体文件
使用fontforge -script subfonts.pe FZSong.ttf song UGBK.sfd生成tfm文件和pfb文件。这个命令会产生四种文件,我们只会用到这两种。要生成UTF8编码的字体,使用Unicode.sfd文件。
另外,这里的song也可以改成其他名字,不过后续步骤也要修改相应的名称。比如说你这里不用song,用了个apple,那么以后所有文件中的song都要改成apple,尤其是在编写tex文件时,要写成:\begin{CJK}{GBK}{apple}
5.建立描述文件
这里使用GBK编码,所以建立c19song.fd
% This is c19song.fd for CJK package.
% created by Edward G.J. Lee
\ProvidesFile{c19song.fd}
\DeclareFontFamily{C19}{song}{\hyphenchar \font\m@ne}
\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * song}{}
\DeclareFontShape{C19}{song}{bx}{n}{<-> CJKb * song}{\CJKbold}
\endinput
这里的cxx要按对应编码修改。注意命名需要统一。
6.建立映射文件
建立song.map文件,可以使用如下脚本快速生成:
#!/bin/bash
for i in *.tfm
do
cat >> song.map << EOF
${i%.tfm} ${i%.tfm} < ${i%.tfm}.pfb
EOF
done
7.建立本地字体文件夹结构
texlive的用户文件夹为~/texmf/,可以自定义配置或安装宏包,用kpsewhich -expand-var '$TEXMFHOME'查看当前用户的文件夹。
mkdir -p ~/texmf/fonts/map/dvips/CJK
mkdir -p ~/texmf/fonts/tfm/CJK/song
mkdir -p ~/texmf/fonts/type1/CJK/song
mkdir -p ~/texmf/tex/latex/CJK/GBK # 如果创建的是UTF8的字体,则创建一个UTF8目录
8.复制文件到对应目录
cp song.map ~/texmf/fonts/map/dvips/CJK
cp *.tfm ~/texmf/fonts/tfm/CJK/song
cp *.pfb ~/texmf/fonts/type1/CJK/song
cp c19song.fd ~/texmf/tex/latex/CJK/GBK
9.更新字体映射
sudo texhash
updmap -user --enable Map song.map
之后,pdflatex就能够成功编译了。
Latex使用CJK包添加字体的更多相关文章
- 添加字体与字符集locale支持(基于busybox文件系统)
添加字体与字符集(基于busybox文件系统) 2011-10-11 14:07:32 分类: LINUX 1.添加字体 下面以文泉驿为例 $ mkdir -p rootfs/usr/share/ ...
- CTEX - 在线文档 - TeX/LaTeX 常用宏包
CTEX - 在线文档 - TeX/LaTeX 常用宏包 页面与章节标题式样 浮动对象及标题设计 生成与插入图形 表格与列表 目录与索引 参考文献 数学与化学公式 ...
- 被遗忘的宝藏-LaTeX发行版自带字体&自己一些字体心得
KMC大作,如果用xelatex的话,这些知识仅仅作为大家了解.希望对于学习latex有所裨益.原文地址:http://bbs.ctex.org/viewthread.php?tid=43596&am ...
- linux服务器下添加字体
版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 引言:这两天在开发一个动态生成海报的东西(图片拼接,图片水印),开发在windows下没有问题,图片和文字都能正常的生成出来. ...
- IDEA中将WEB-INF\lib下的Jar包添加到项目中
打开Project Structure[可以使用快捷键:Ctrl+Alt+Shift+S]左侧选中Modules,在Dependecies中,点击右侧“+”号,选择JARS or directorie ...
- maven 将jar包添加到本地仓库
maven 如何将jar包添加到本地仓库 CreateTime--2018年4月19日12:50:50 Author:Marydon 情景描述:当项目所需的jar包,maven中央仓库中没有该j ...
- build path libraries java基础--Jar包添加到build path方式说明--01
摘自: http://blog.csdn.net/haolongabc/article/details/7007701 java基础--Jar包添加到build path方式说明--01 前言:这段短 ...
- maven 如何将自己的jar包添加到本地仓库
1 准备一个需要添加到本地仓库的jar包 我这里准备了一个名为mail.jar 的jar包,放到E:\Install Files目录下面 2 下面演示如何将准备的jar包添加到本地仓库 1 语法 mv ...
- mac为photoshop添加字体
https://jingyan.baidu.com/article/a3761b2b8484321576f9aaac.html 一. 1)点击Launchpad 2)搜索“字体册” 二 打开字体册 三 ...
随机推荐
- Jmeter系列(36)- Access Log Sampler
简介 Access Log Sampler 是个非常有用的工具,可以收集和分析真实用户操作的数据,并可用于流量分析.常见的就是我们的nginx的access.log 日志 使用 access.log ...
- Jmeter系列(27)- 常用逻辑控制器(6) | 如果(if)控制器If Controller
如果(if)控制器(If Controller) 在实际工作中,当使用JMeter做性能脚本或者接口脚本时,当遇到需要对不同的条件做不同的操作时,我们可以使用JMeter中if控制器来实现 if控制器 ...
- CLion远程调试嵌入式开发板程序
CLion远程调试嵌入式开发板程序 目录 CLion远程调试嵌入式开发板程序 1. 目的 2. 前提条件 3. CLion设置 3.1 设置一个Deployment 3.2 上传需要的目录到目标板子 ...
- 分组密码(四)AES算法① — 密码学复习(七)
介绍完S-PN型结构之后,下面介绍AES算法.由于内容比较多所以将其分为两篇来介绍,本篇主要讲AES的历史时间节点.产生背景.与DES的对比.算法框图(粗略)以及一些数学基础. 7.1 AES的历史时 ...
- 分享一下我的Python自学历程,分享下我自己学习方法
其实关于编程这事儿没有接触的那么早,大一的时候没什么关注点,有一门课是vb,一天天的,就抄抄作业啥的就完事儿了.当时也觉的自己不是学编程的料,想着以后估摸也不会干开发相关的工作. 我的自学历程 阴差阳 ...
- 新版发布|ShardingSphere 5.0.0-beta 来了!
Apache ShardingSphere 5.0.0-beta 版在经过长达半年的筹备后,终于将在近期正式 Release! 本文将带领大家一同预览新版本即将带来哪些重大亮点功能. 作者介绍 潘娟 ...
- macbook air m1上传文件到github
一,首先安装git,打开ssh文件里的id_rsa.pub,然后复制所有内容. 二,github上申请自己的账号,右上角settings里选择SSH and GPG keys,点击new ssh ke ...
- 题解 Beautiful Pair
题目传送门 题目大意 给出一个 \(n\) 个点的序列 \(a_{1,2,...,n}\) ,问有多少对点对 \((i,j)\) 满足 \(a_i\times a_j\le a_k(i\le k\le ...
- 搭建Mac+Java+appium+IOS真机自动化环境
一.安装前环境准备 1.确保电脑已经有homebrew(包管理器) 下载链接[https://brew.sh/] 2.通过 brew 安装node.js brew install node 安装 ...
- DM8数据库单机安装
一.系统概要 表1 部署情况一览表 操作系统 Windows10 数据库版本 DM8(开发版) 数据库类型 单机 磁盘挂载 无 Key信息 无 二.操作系统信息检查 2.1 操作系统版本 [root@ ...