tex live 2019 中 latex->dvips->ps2pdf 的彩色框超引用错误

tex live 2019 中 latex->dvips->ps2pdf 的彩色框超引用错误

我正在使用 tex live 2019,并且遇到了 hyperref 的问题。

当我使用 PDFLaTeX 时,不会发生错误,如第一张图片所示。

但是,当我使用 latex->dvips->ps2pdf 时,所有引用和参考文献都被彩色框隐藏。(第二张图片)

我怎么解决这个问题?

PDFLaTeX

LaTeX->DVIPS->PS2PDF

\documentclass[twocolumn, 10pt]{IEEEtran}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{cite}
\usepackage{stfloats}
\usepackage{subfigure}
\usepackage{epstopdf}
\usepackage{psfrag}
\usepackage[mathscr]{euscript}
\usepackage{acronym}
\usepackage{booktabs}
\usepackage[table]{xcolor}

\begin{document}
   \begin{align}
       A=B
       \label{equation}
   \end{align}
This is the equation \eqref{equation}.
\end{document}

以上是我使用的代码。

我正在使用 TexStudio。因此我通过以下方式编译了代码:

工具 > 命令 > LaTeX

工具 > 命令 > DVI->PS

工具 > 命令 > PS->PDF

答案1

笔记: hyperref已更新,可检测所使用的 GhostScript 版本pstopdf并在每种情况下使用适当的代码。因此,无需使用下面描述的解决方法(自 2020 年 1 月发布以来hyperref)。


Ulrike 在聊天中提供了一个更简单的测试用例

\documentclass{article}
\usepackage{hyperref}
\begin{document}
\url{www.abc.de}
\end{document}

对我来说(使用 gs 9.27)

在此处输入图片描述

但 9.50 产生

事实证明 GhostScript 在 9.50 版本中改变了对边框规范的解释

http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=90bdf83d696562e4136b8f565cac06cc32b161ae

在问题下的评论中,Ulrike 展示了如何禁用 hyperref 中的代码,但这会使事情在 9.50 中工作,但在任何旧版本中都会失败,我希望下面的代码无论如何都能工作,它会在 gs 版本号上插入一个测试,该测试在 PostScript 中实现,因此推迟到您在 dvips 生成的 PostScript 上运行 ps2pdf。

如果有人尝试过这个,评论它是否有效或无效以及他们拥有哪个版本的 gs,那将会很有用,谢谢!

将下面的代码保存hdvips.def在与测试文件相同的文件夹中(提供整个文件,因为修补它不方便)

%%
%% This is file `hdvips.def',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% hyperref.dtx  (with options: `dvips')
%% 
%% File: hyperref.dtx Copyright 1995-2001 Sebastian Rahtz,
%% with portions written by David Carlisle and Heiko Oberdiek,
%% 2001-2012 Heiko Oberdiek.
%% 2016-2019 Oberdiek Package Suport Group
%% 2019 LaTeX3 Project
%%      https://github.com/latex3/hyperref/issues
%%
%% This file is part of the `Hyperref Bundle'.
%% -------------------------------------------
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%%
%% The Current Maintainer of this work is the LaTeX3 Project.
%%
%% The list of all files belonging to the `Hyperref Bundle' is
%% given in the file `manifest.txt'.
%%
\ProvidesFile{hdvips.def}
  [2019/11/10 v7.00c %
  Hyperref driver for dvips + gs test]
\Hy@VersionCheck{hdvips.def}
\providecommand*{\XR@ext}{pdf}
\let\Hy@raisedlink\@empty
\def\literalps@out#1{\special{ps:SDict begin #1 end}}%
\def\headerps@out#1{\special{! #1}}%
\input{pdfmark.def}%
\ifx\@pdfproducer\relax
  \def\@pdfproducer{dvips + Distiller}%
\fi
\providecommand*\@pdfborder{0 0 1}
\providecommand*\@pdfborderstyle{}
\providecommand*\@pdfview{XYZ}
\providecommand*\@pdfviewparams{ H.V}
\def\Hy@BorderArrayPatch{BorderArrayPatch}
\g@addto@macro\Hy@FirstPageHook{%
  \headerps@out{%
    /DvipsToPDF{72.27 mul Resolution div} def%
    /PDFToDvips{72.27 div Resolution mul} def%
    /BPToDvips{72 div Resolution mul}def
    %%%%%
    %%%%%
    %%%%% START CHANGE
    %if  using gs and release < 9.50 patch, otherwise make this a no-op
    product (Ghostscript) search {pop pop pop  revision 950 lt } {pop false} ifelse
    {
    /BorderArrayPatch{%
      [exch{%
        dup dup type/integertype eq exch type/realtype eq or%
        {BPToDvips}if%
      }forall]%
    }def
    }{
    /BorderArrayPatch{} def
    }
    ifelse
   % end of gs version test
   %%%
   %%% END
   %%%
    /HyperBorder {1 PDFToDvips} def%
    /H.V {pdf@hoff pdf@voff null} def%
    /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def%
    /H.S {%
      currentpoint %
      HyperBorder add /pdf@lly exch def %
      dup DvipsToPDF 72 add /pdf@hoff exch def %
      HyperBorder sub /pdf@llx exch def%
    } def%
    /H.L {%
      2 sub dup%
      /HyperBasePt exch def %
      PDFToDvips /HyperBaseDvips exch def %
      currentpoint %
      HyperBaseDvips sub /pdf@ury exch def%
      /pdf@urx exch def%
    } def%
    /H.A {%
      H.L %
      currentpoint exch pop %
      vsize 72 sub exch DvipsToPDF %
      HyperBasePt sub % baseline skip
      sub /pdf@voff exch def%
    } def%
    /H.R {%
      currentpoint %
      HyperBorder sub /pdf@ury exch def %
      HyperBorder add /pdf@urx exch def %
      currentpoint exch pop vsize 72 sub %
      exch DvipsToPDF sub /pdf@voff exch def%
    } def%
  }%
}
\AtBeginShipoutFirst{%
  \ifHy@setpagesize
    \begingroup
      \@ifundefined{stockwidth}{%
        \ifdim\paperwidth>\z@
          \ifdim\paperheight>\z@
            \special{papersize=\the\paperwidth,\the\paperheight}%
          \fi
        \fi
      }{%
        \ifdim\stockwidth>\z@
          \ifdim\stockheight>\z@
            \special{papersize=\the\stockwidth,\the\stockheight}%
          \fi
        \fi
      }%
    \endgroup
  \fi
  \Hy@DisableOption{setpagesize}%
}
\def\setpdflinkmargin#1{%
  \begingroup
    \setlength{\dimen@}{#1}%
    \literalps@out{%
      /HyperBorder{\strip@pt\dimen@\space PDFToDvips}def%
    }%
  \endgroup
}
\endinput
%%
%% End of file `hdvips.def'.

相关内容