LyX-2.1.4 から生成する PDF のリンクのバグ対応

PDF でリンクを有効にしようとしても,できないバグがあるようなので,以下の対応。

  1. 文書の設定 > PDF特性 > Hyperrefサポートを使う のチェックをはずす
  2. 文書の設定 > LaTeXプリアンブル に以下を追加 

\usepackage[dvipdfmx, bookmarkstype=toc, colorlinks=true, urlcolor=black, linkcolor=blue, citecolor=black, linktocpage=false, bookmarks=true, bookmarksnumbered=true]{hyperref}

\usepackage{pxjahyper}

 

これで,目次をクリックすると該当ページへ飛ぶことができる。(しおりも可)

参考にしたページ:
LyXで目次にリンク付きのPDFを作る方法 | 理系のメモ帳

ただ, pxjahyper はTeXLiveでサポートされているものの,「unicodeが使えない」というエラーが出るので,「しおり」は保留。

 

 20160204追記:

文字化けしていた「しおり」が一部の文書で正しく表示されるようになった。
しかし,上記エラーが出て pxjahyper を使えない文書もある。
その違いが何なのか,まだわからない。
バグの存在は, \(\TeX\) の構文において,「%」がコメントアウトを意味しているのと,UTF-8 では「%xx」で1バイトを表していることとがバッティングしているからかもしれない。特に URL にUnicode が含まれると制御がむずかしそうだ。

 

 20160224追記:

目次がしおりとして機能するケースは,外部リンクのURLを記載していないドキュメントのようだ。http://〜を入れると pxjahyper がエラーになる。原因は,\(\LyX\) が自動的に

\usepackage[unicode=true]{dvipdfmx}


をプリアンブルの最初の方に挿入するため,dvipdfmx が二重に読み込まれ,

    ! LaTeX Error: Option clash for package hyperref.
    l.33 \usepackage
                {pxjahyper}
The package hyperref has already been loaded with options:
  [unicode=true]

(/usr/local/texlive/2015/texmf-dist/tex/platex/pxjahyper/pxjahyper.sty
Package: pxjahyper 2012/05/27 v0.2

! Package pxjahyper Error: hyperref 'unicode' mode is not supported.

l.79 ...yperref 'unicode' mode is not supported}{}
                                                  %
Package loading is aborted right now.
)

エラーとなるから。ソースを見ると次のようになっている。

%
% pxjahyper.sty
%

%% package declaration
\NeedsTeXFormat{pLaTeX2e}
\ProvidesPackage{pxjahyper}[2012/05/27 v0.2]

%% error messages
\def\pxhy@pkgname{pxjahyper}
\def\pxhy@warn{\PackageWarningNoLine\pxhy@pkgname}
\def\pxhy@error{\PackageError\pxhy@pkgname}
\@onlypreamble\pxhy@fatal
\def\pxhy@fatal#1#2{%
  \pxhy@error{#1}{#2Package loading is aborted right now.}%
}

%% packages
\RequirePackage{atbegshi}

(略)

%------------------- environment check

%% The hyperref package must be loaded in advance.
\@ifpackageloaded{hyperref}{}{%else
  \pxhy@fatal{'hyperref' not yet loaded}{}%
  \endinput
}
%% hyperref option 'unicode' must not be set.
\expandafter\ifx\csname ifHy@unicode\expandafter\endcsname
 \csname iftrue\endcsname
  \pxhy@fatal{hyperref 'unicode' mode is not supported}{}%      ⟸これ
  \expandafter\endinput
\fi

%% Check hyperref driver.
\ifx\pxhy@driver\@undefined
  \def\pxhy@tmpa{hdvipdfm}
  \ifx\Hy@driver\pxhy@tmpa
    \let\pxhy@driver\pxhy@driver@dvipdfmx
  \else
    \let\pxhy@driver\pxhy@driver@none
  \fi
\fi

(後略)