如果使用预编译格式,CJKutf8 字体的使用会发生变化吗?

如果使用预编译格式,CJKutf8 字体的使用会发生变化吗?

考虑下面发布的 MWE(基于如何在 LaTeX 中输入中文?) — 您将需要simsun.ttc同一目录中的字体。

首先,在下面的 MWE(称之为test.tex)中取消注释\begin/\end{filecontents*}部分,然后使用以下命令进行编译:

pdflatex test.tex && biber test && pdflatex test.tex

这也将生成.bib - 并且一切都应该编译正常,并且可以选择中文文本:

测试.png

...最重要的是,本次编译运行结束时报告了以下信息:

(./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.cfgtexhashupdmap-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 被加载(并且文档中的中文字母也是可选的)。

相关内容