在 LaTeX 中更改 eps 文件中的颜色

在 LaTeX 中更改 eps 文件中的颜色

我们有一个 EPS 文件,其中的徽标是单色的。是否可以在 LaTeX 中以某种方式操纵此颜色?我们需要为同一印记的不同系列使用不同颜色的徽标。

编辑

这是徽标:

http://hpsg.fu-berlin.de/~stefan/transfer/Logo_Buchcover_hellblau.eps

答案1

PDF 模式下 pdfTeX 的图形驱动程序文件有一个技巧pdftex.def。如果 PDF 图像不包含颜色设置,pdftex.def则不强制使用黑色,而是使用当前颜色。

  1. 首先我们需要将 EPS 文件转换为 PDF:

    ps2pdf -dEPSCrop -dCompressPages=false Logo_Buchcover_hellblau.eps Logo_Buchcover.pdf
    

    选项-dCompressPages=false禁用页面内容的压缩,因为我们需要在下一步中对其进行操作。由于图像不包含很多运算符,因此压缩也不会带来太多好处。

  2. 需要禁用颜色设置。但是需要小心。PDF 将其间接对象的位置记录在交叉引用表中,我们只更改一个字节,不添加或删除字节以保持 PDF 结构完整。

    识别该行:

    0.599609 0.0499878 0.0499878 0 k
    

    k是设置 CMYK 颜色的运算符。百分比%是 PDF(PostScript、TeX)中的注释字符,因此我们将第一个更改0%

    %.599609 0.0499878 0.0499878 0 k
    

    用于修改字节的编辑器不得更改任何其他内容(行尾、制表符等)。如果有疑问,那么十六进制编辑器也可以。

  3. 现在我们可以在 pdfLaTeX 中使用该图像:

    \documentclass[pdftex]{article}
    % The trick does not work for other drivers
    \usepackage{graphicx}
    \usepackage{color}
    
    \begin{document}
    \includegraphics{Logo_Buchcover}
    \textcolor{red}{\includegraphics{Logo_Buchcover}}
    \textcolor{blue}{\includegraphics{Logo_Buchcover}}
    \end{document}
    

    结果

答案2

在此处输入图片描述

这可能不适用于任何图形eps,但对于不太复杂的矢量图形,可以使用此工作流程:

  • 转换Logob.eps为;Asymptotepstoedit -f asy Logob.eps Logob.asy
  • 简化asy代码并在适当的地方添加改变颜色的命令。

对于提供的徽标,pstoedit发现该DIN-Regular字体用于文本。

下面Logob.tex包含在 中绘制徽标的程序asydef,它接受背景颜色、书籍颜色和三行文本颜色的参数。

\documentclass{article}
\usepackage{fontspec}
\setmainfont{dinregular.ttf}
\usepackage[inline]{asymptote}
\begin{asydef}
size(88,43);
import pstoedit;
void logo(pen bgPen=white,pen[] bookPen=new pen[]{black}, pen[] textPen=bookPen){
  filldraw(box((0,0),(89,43)),bgPen,bgPen);
  textpen=textPen[0];
  textpen += fontsize(7.84581);

  label(baseline("language"),(56.229,33),align,textpen);

  textpen=textPen[1%textPen.length];  
  textpen += fontsize(8.02011);

  label(baseline("science"),(56.229,23.5),align,textpen);

  textpen=textPen[2%textPen.length];  
  textpen += fontsize(8.02011);
  label(baseline("press"),(56.229,14),align,textpen);

  currentpen += 0.5bp;
  currentpen += squarecap;
  currentpen += miterjoin;
  currentpen += linetype(" ",false);

  fill((14.0195,42.5195)--(0,2.47656)--(7.07031,0)
    --(21.0898,40.043)--cycle,bookPen[0%bookPen.length]);
  fill((21.0859,42.4258)--(21.0859,0)--(28.5781,0)
    --(28.5781,42.4258)--cycle,bookPen[1%bookPen.length]);
  fill((29.5742,42.4258)--(29.5742,0)--(37.0664,0)
    --(37.0664,42.4258)--cycle,bookPen[2%bookPen.length]);
  fill((38.0625,33.9648)--(38.0625,0)--(45.5547,0)
    --(45.5547,33.9648)--cycle,bookPen[3%bookPen.length]);
  fill((46.5508,42.4258)--(46.5508,0)--(54.043,0)
    --(54.043,42.4258)--cycle,bookPen[4%bookPen.length]);
}  
\end{asydef}
\begin{document}
\begin{minipage}{88bp}
\begin{asy}
logo();
\end{asy}
\end{minipage}
\begin{minipage}{88bp}
\begin{asy}
logo(bgPen=gray,bookPen=new pen[]{white},textPen=new pen[]{black});
\end{asy}
\end{minipage}
%
\begin{minipage}{88bp}
\begin{asy}
logo(bgPen=lightblue+opacity(0.3),bookPen=new pen[]{green,orange});
\end{asy}
\end{minipage}
%
\begin{minipage}{88bp}
\begin{asy}
logo(bgPen=lightgreen+opacity(0.3),bookPen=new pen[]{red,green,darkblue,orange,yellow}
  ,textPen=new pen[]{red,green,blue});
\end{asy}
\end{minipage}
\end{document}

要使用 处理它xelatex,请运行:

xelatex Logob.tex
asy -f pdf -tex=xelatex Logob-*.asy
xelatex Logob.tex

相关内容