如何使用 tikzfadingfrompicture 启用字体嵌入?(用例:文本颜色渐变)

如何使用 tikzfadingfrompicture 启用字体嵌入?(用例:文本颜色渐变)

我想在文档的背景中显示一个(非常大的)部分透明的表情符号,并且表情符号上有颜色渐变。

到目前为止,唯一成功的方法似乎是使用 tikzfadingfrompicture 的以下 tikz 解决方案

为了更容易复制/测试,我在以下 MWE 中将表情符号更改为字母 T。

\documentclass[a4paper,12pt]{report}
\usepackage{mwe}
\usepackage{fontspec}

\setmainfont{DejaVu Sans}
\newfontfamily\emojifont[Scale=1.0]{DejaVu Serif}

\usepackage{tikz}

\usetikzlibrary{fadings,patterns}
 

\AddToHook{shipout/background}{%
    \put (1.5in,-4.5in){
        \begin{tikzfadingfrompicture}[name=backgroundemojibus]
        \node [text=transparent!40] (textnodebus)
        {
            \emojifont\fontsize{360}{360}\selectfont T
        };
        \end{tikzfadingfrompicture}

        \begin{tikzpicture}
        \shade[path fading=backgroundemojibus,fit fading=false, opacity=0.4, left color=green,right color=blue](textnodebus.south west) rectangle (textnodebus.north east);
        \end{tikzpicture}
    }
}

\begin{document}
\blindtext
\end{document}

我使用 lualatex 还是 xelatex 编译它都无关紧要。两种情况下均未嵌入表情符号字体:

$ pdffonts 测试字体嵌入.pdf

名称类型编码 emb sub uni 对象 ID


RMPGEQ+DejaVuSans CID TrueType Identity-H 是 是 是 39 0

但是 LuaLaTeX 输出显示该字体的必要性是已知的:

$ lualatex test-fontembedding.tex
...
(./test-fontembedding.aux) (/usr/local/texlive/2024/texmf-dist/tex/latex/base/ts1cmr.fd) (/usr/local/texlive/2024/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
) (/usr/local/texlive/2024/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty (/usr/local/texlive/2024/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg)){/usr/local/texlive/2024/texmf-var/fonts/map/pdftex/updmap/pdftex.m
ap} [1] (./test-fontembedding.aux))
 933 words of node memory still in use:
   19 hlist, 1 vlist, 9 rule, 2 glue, 3 kern, 1 glyph, 53 attribute, 48 glue_spec, 53 attribute_list, 2 write, 16 pdf_literal, 16 pdf_colorstack nodes
   avail lists: 1:1,2:135,3:71,4:10,5:106,6:2,7:1800,9:64,10:7,11:144
</usr/share/fonts/truetype/LinBiolinum_R.otf></usr/share/fonts/truetype/EmojiOneColor-SVGinOT.ttf>
Output written on test-fontembedding.pdf (1 page, 16519 bytes).
Transcript written on test-fontembedding.log.

即使改变 tikzfadingfrompicture \node 也不能解决这个问题

\node [font=\emojifont,text=transparent!40] (textnodebus)
{
    \fontsize{360}{360}\selectfont T
};

在未安装字体的系统上,没有嵌入字体(非嵌入字体)时会显示差异:

显示 System: T 字体的屏幕截图

对比

系统上未嵌入字体的屏幕截图:空白背景

另一个比较注意事项:将代码更改为不使用颜色渐变,这样可以解决问题,字体随后嵌入,并且背景中的字形将在任何系统上显示。

\begin{tikzpicture}
\node [text=transparent!40]
{
   \emojifont\color{red}\fontsize{360}{360}\selectfont T
};
\end{tikzpicture}

$ pdffonts 测试-fontembedding.tex

名称类型编码 emb sub uni 对象 ID


XQLTJA+DejaVuSerif CID TrueType Identity-H 是 是 是 32 0

RMPGEQ+DejaVuSans CID TrueType Identity-H 是 是 是 33 0

另一个注意事项:跑步

$ gs -P- -dSAFER -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=%stderr -sOutputFile=test-fontembedding.full.pdf -dPDFSETTINGS=/prepress -dEmbedAllFonts=true test-fontembedding.pdf

随后也会修复该问题(对于 gs 的输出文件),因此跳过的字体嵌入就是整个问题。

因此,我自然想知道我做错了什么,或者我在哪里禁用了使用颜色渐变代码嵌入字体。 有没有什么办法可以解决这个问题?

//编辑:

  • 将字体改为常用字体,将表情符号改为字母 T
  • 添加了来自我的系统和手机的屏幕截图(未安装字体)

相关内容