考虑下面发布的 MWE(基于如何在 LaTeX 中输入中文?) — 您将需要simsun.ttc
同一目录中的字体。
首先,在下面的 MWE(称之为test.tex
)中取消注释\begin
/\end{filecontents*}
部分,然后使用以下命令进行编译:
pdflatex test.tex && biber test && pdflatex test.tex
这也将生成.bib - 并且一切都应该编译正常,并且可以选择中文文本:
...最重要的是,本次编译运行结束时报告了以下信息:
(./test.aux) ){/media/disk/texlive/2014/texmf-dist/fonts/enc/dvips/lm/lm-
ec.enc}<simsun.ttc><simsun.ttc><simsun.ttc><simsun.ttc></media/disk/texli
ve/2014/texmf-dist/fonts/type1/public/lm/lmbx12.pfb></media/disk/texlive/
2014/texmf-dist/fonts/type1/public/lm/lmr10.pfb></media/disk/texlive/2014
/texmf-dist/fonts/type1/public/lm/lmtt10.pfb>
Output written on test.pdf (1 page, 77939 bytes).
Transcript written on test.log.
也就是说 -simsun.ttc
字体已读入,正如预期的那样。
现在,让我们用预编译格式“header”尝试一下;首先,注释掉\begin
/\end{filecontents*}
部分,这样它就和 MWE 完全相同了(我们不需要 .bib 文件,因为它已经生成了 - 而且我们不需要运行biber
,因为该.bbl
文件在上一次运行中已经生成了)。
首先生成预编译格式:
pdflatex -ini -jobname="test" "&test" mylatexformat.ltx "test.tex"
注意此时日志中有:
$ grep 'zhw\|simsun\|uniso' test.log
(/media/disk/texlive/2014/texmf-dist/tex/generic/zhmetrics/zhwinfonts.tex
然后,让我们使用预编译格式来编译文档:
pdflatex "&test" test.tex
现在,编译结束如下:
] (./test.aux) ){/media/disk/texlive/2014/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc}
kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 unisongsl7a
mktexpk: Running ttf2pk -q unisongsl7a 600
mktexpk: ~/.texlive2014/texmf-var/fonts/pk/modeless/zhmetrics/unisong/unisongsl7a.600pk: successfully generated.
<~/.texlive2014/texmf-var/fonts/pk/modeless/zhmetrics/unisong/unisongsl7a.600pk>
kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 unisongsl65
^Ckpathsea: Appending font creation commands to missfont.log.
!pdfTeX error: pdflatex (file unisongsl65): Font unisongsl65 at 600 not found
==> Fatal error occurred, no output PDF file produced!
现在事情是这样的:在这里我按下了 Ctrl-C - 但通常情况下,pdflatex
会失败,因为会失败(我只有在添加到并将“Map ttfonts.map”添加到新文件mktexpk
后才能让它工作,然后,然后TEXFONTMAPS = .;$TEXMFDIST/source/fonts/zhmetrics;$TEXMF/fonts/map/{$progname,pdftex,dvips,}//
texmf-dist/web2c/texmf.cnf
$(kpsewhich --var-value=TEXMFLOCAL)/web2c/updmap.cfg
texhash
updmap-sys
- 然后它再次失败 w/“‘cyberb@Unicode@’ 的模糊条目:字体文件存在但未包含在内,将被视为字体文件不存在“;然后从 updmap.cfg 中删除“Map...”行,然后再次删除 updmap-sys - 只有这样 mktexpk 才能为 unisong 生成位图)。
但问题是——我确实不是想要使用unisong
(显然,因为它是一种位图字体,即使可以生成,那些字形在 pdf 中也是不可选的);——我想使用simsun.ttc
,就像我在不使用预编译头时所做的那样?!
所以我的问题是 - 使用预编译格式文件时,什么可能导致字体使用发生变化;以及如何simsun.ttc
在预编译格式的情况下使用它?
陛下,test.tex
:
\RequirePackage{filecontents}
% %% NOTE: filecontents cannot be active when -ini runs; must be commented!
% %% NOTE: cannot use just {{文章}}, must add a \relax inside!
% \begin{filecontents*}{\jobname.bib}
% @misc{baiduweb,
% title = {{文章}\relax},
% author = {Baidu},
% url = {http://home.baidu.com/},
% year = {2015},
% }
% \end{filecontents*}
\documentclass{article}
\usepackage[%
style=ieee,
isbn=true,
doi=false,
url=true,
bibencoding=utf8,
backend=biber
]{biblatex}
% \addbibresource{\jobname.bib}
\bibliography{\jobname}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[T2A, T1]{fontenc}
\usepackage[russian,greek,english]{babel}
\usepackage{CJKutf8}
% NOTE: this may require the font simsun.ttc in the same directory as this .tex file!
\AtBeginDvi{\input{zhwinfonts}} % MUST have! for \usepackage{CJKutf8}
% [http://lists.ffii.org/pipermail/cjk/2007-November/002045.html [Cjk] Problem with CJKchar]
\newcommand{\Chi}[2]{%
\csname CJK*\endcsname{UTF8}{zhsong}%
\CJKchar{#1}{#2}%
\csname endCJK*\endcsname
}
% 文: 0x6587
\DeclareUnicodeCharacter{6587}{\Chi{"65}{"87}} % YES!
% 章: 0x7AE0
\DeclareUnicodeCharacter{7AE0}{\Chi{"7A}{"E0}} %
\begin{document}
% macro test:
\Chi{"65}{"87}\Chi{"7A}{"E0} % ok
% direct unicode chars:
文章 % ok
Just a testing of citation here: \cite{baiduweb} ...
% % seems this with the environment is not really needed?!
% \makeatletter
% \let\CJK@ignorespaces\relax % else the below breaks..
% \CJK@envStart{}{UTF8}{zhsong}
% \makeatother
\printbibliography[resetnumbers]
% \makeatletter
% \CJK@envEnd{}
% \makeatother
\end{document}
答案1
我想我明白了:只需使用 a 在 ;\endofdump
之前稍稍指示预编译格式的结束\begin{document}
,然后在\AtBeginDvi{\input{zhwinfonts}}
其后插入行。
因此,序言内容如下:
\RequirePackage{filecontents}
% %% NOTE: filecontents cannot be active when -ini runs; must be commented!
% %% NOTE: cannot use just {{文章}}, must add a \relax inside!
% \begin{filecontents*}{\jobname.bib}
% @misc{baiduweb,
% title = {{文章}\relax},
% author = {Baidu},
% url = {http://home.baidu.com/},
% year = {2015},
% }
% \end{filecontents*}
\documentclass{article}
\usepackage[%
style=ieee,
isbn=true,
doi=false,
url=true,
bibencoding=utf8,
backend=biber
]{biblatex}
% \addbibresource{\jobname.bib}
\bibliography{\jobname}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[T2A, T1]{fontenc}
\usepackage[russian,greek,english]{babel}
\usepackage{CJKutf8}
% NOTE: this may require the font simsun.ttc in the same directory as this .tex file!
% [http://lists.ffii.org/pipermail/cjk/2007-November/002045.html [Cjk] Problem with CJKchar]
\newcommand{\Chi}[2]{%
\csname CJK*\endcsname{UTF8}{zhsong}%
\CJKchar{#1}{#2}%
\csname endCJK*\endcsname
}
% 文: 0x6587
\DeclareUnicodeCharacter{6587}{\Chi{"65}{"87}} % YES!
% 章: 0x7AE0
\DeclareUnicodeCharacter{7AE0}{\Chi{"7A}{"E0}} %
\csname endofdump\endcsname% may \def to \relax; http://tex.stackexchange.com/questions/57398
\AtBeginDvi{\input{zhwinfonts}} % MUST have! for \usepackage{CJKutf8}
\begin{document}
... 其余的都一样。有了这个,现在也使用预编译格式编译,我可以看到 simsun.ttc 被加载(并且文档中的中文字母也是可选的)。