![包含使用独立创建的图形时,相同的字体嵌入两次](https://linux22.com/image/258859/%E5%8C%85%E5%90%AB%E4%BD%BF%E7%94%A8%E7%8B%AC%E7%AB%8B%E5%88%9B%E5%BB%BA%E7%9A%84%E5%9B%BE%E5%BD%A2%E6%97%B6%EF%BC%8C%E7%9B%B8%E5%90%8C%E7%9A%84%E5%AD%97%E4%BD%93%E5%B5%8C%E5%85%A5%E4%B8%A4%E6%AC%A1.png)
我使用XeLaTeX
、TikZ
和standalone
来创建图形,例如流程图。当我使用includegraphics{}
将该图形包含到另一个使用相同的字体,那么该字体将嵌入到 pdf 中一次对于主文档,然后再次对于每个图形。
为了重现该问题,下面是使用 的简单流程图和另一个包含流程图 pdf 的文档的代码\includegraphics
。
字体 XITS 将包含两次。
% !TEX program = XeLaTeX
\documentclass[tikz=true]{standalone}
\usepackage{fontspec}
\setmainfont{XITS}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
%% ===================================================
\begin{document}
\tikzstyle{block} = [draw, rectangle, fill=blue!20, text width=9.5em, node distance=14em, text centered, minimum height=4em]
\tikzstyle{line} = [draw, -latex']
%
\begin{tikzpicture}[node distance = 2cm, auto]
\node [block] (Create) {create flowchart with TikZ and standalone};
\node [block, right of=Create] (Include) {include flowchart into main document};
\node [block, right of=Include] (CheckFont) {check which fonts have been embedded};
\path [line] (Create) -- (Include);
\path [line] (Include) -- (CheckFont);
\end{tikzpicture}
\end{document}
以及主要文件
% !TEX program = XeLaTeX
\documentclass[]{article}
\usepackage{graphicx}
\usepackage{fontspec}
\setmainfont{XITS}
% ===============
\begin{document}
Text before the figure.
\begin{figure}
\centering
\includegraphics{tikz_flowchart.pdf}
\caption{Some figure}
\label{fig:flowchart}
\end{figure}
Some more text.
\end{document}
在文档属性中,Adobe Reader 两次显示 XITS:
如果我将 Tikz 流程图直接包含在主文档中,则字体只会嵌入一次,但我不想每次都编译它,有时我会使用其他工具(例如 Inkscape)来创建图形(但它们都使用相同的字体)。
为了获得较小的 pdf 文件(因为我认为这种行为很奇怪),我希望每个字体只包含一次。我知道该工具pdfsizeopt
,如问题中所述如何创建适合互联网的小型 PDF 文件,但虽然它确实减小了文件大小,但却无助于解决字体被多次包含的问题。
答案1
我发现没有 LaTeX 内部方法来优化这一点。你可以使用pdfsize选项作为优化嵌入字体的外部工具。只要字体实例的字体名称相同,它就能很好地工作。它还使用子集,这样只嵌入您使用的字形,并将字体转换为较小的格式。
我建议禁用黑白图像转换为 JBIG2 格式,以保证兼容性,并可能禁用 PNGOUT 优化,以保证速度。在其他所有方面,我在优化 PdfLaTeX 和 LuaTeX/ConTeXt 中的 PDF 时始终具有完全兼容性和良好的性能。
答案2
不幸的是,XeTeX 没有解析导入的图形和重新映射字体的功能 --- pdfTeX 提供了这个功能(lualatex 继承了它)并且包含一个命令来启用它:
尝试\pdfinclusioncopyfonts=0
摘自第 32 页pdftex 手册:
\pdfinclusioncopyfonts
(整数)如果为正数,此参数强制 pdfTEX 包含使用 加载的 pdf 文件中的字体
\pdfximage
,即使这些字体在磁盘上可用。可能会创建更大的文件,但包含的 pdf 文件肯定会嵌入适当的字体;事实上,磁盘上的字体可能与嵌入的字体不同,并且字形可能会丢失。