hyperref で指定した以外のリンクを作らない方法(再掲)

hyperref で指定した以外のリンクを作らない方法(再掲)

- 匿 名 の投稿
返信数: 16
こんにちは

昨日,旧フォーラムの方でお尋ねしたのですが,旧フォーラムの稼働率が低そうに思いましたので,同じ文面ですがこちらに改めて投稿させて頂くことにしました.ご了承下さい.



hyperref パッケージの使い方について教えて下さい。

hyperref パッケージを使うと、\label と \ref の間で自動的にリンクが張られますね。
この自動的なリンクを張らず,自分で指定した
\hyperlink{labelgo}{ここから}

\hypertarget{labelgo}{ここへ}
の関係だけにリンクを張る,という方法はないものでしょうか。

以上、ご存じの方、ご教示お願い致します。
匿 名 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 前田 一貴 の投稿
知らないので調べてみましたが,hyperref では \ref* というリンクを張らない \ref が使えるようです.
したがって,これを常に使うようにすればよいのではないでしょうか.
\ref でも \ref* でもリンクを張らないということでしたら,\usepackage{hyperref} の後に

\makeatletter
\AtBeginDocument{\DeclareRobustCommand\ref{\@ifstar\@refstar\@refstar}}
\makeatother

とでも書いておけばよさそうです.
前田 一貴 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- Z. R. の投稿
この自動的なリンクを張らず,自分で指定した
\hyperlink{labelgo}{ここから}

\hypertarget{labelgo}{ここへ}
の関係だけにリンクを張る,という方法はないものでしょうか。

hyperref のオプションに implicit=false を指定すると、「\hyperlink\url はリンクになるが \ref\pageref\cite はリンクにならない」という状態になるようです。

\documentclass[a4paper]{jsarticle}
% しおりは作られないようだ
\usepackage[implicit=false,bookmarks=true]{hyperref}
\begin{document}
\section{First}
\hyperlink{labelgo}{ここから}
\section{Next}\label{sec:next}
\hypertarget{labelgo}{ここへ}
\section{Last}
\ref{sec:next}節(\pageref{sec:next}ページ)や
某Wiki\cite{texwiki}を参照。
\begin{thebibliography}{9}
\bibitem{texwiki}
{\TeX}~Wiki, Web content.\\
URL: \url{http://oku.edu.mie-u.ac.jp/~okumura/texwiki/}
\end{thebibliography}
\end{document}
Z. R. への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 前田 一貴 の投稿
ああ,なるほど."redefines LaTeX internals" ってそういう意味ですか.
オプション一覧は眺めていたのですが,気付いていませんでした.
ありがとうございます.
Z. R. への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 匿 名 の投稿
Z. R. 様

質問致しました山下です.ご回答ありがとうございました.うまくいきました.

ただ,この場合は dvipdfmx 経由ではなく,dvips 経由になるのですね.

この Wiki に

\usepackage[dvipdfmx]{hyperref}
\usepackage{pxjahyper}
\hypersetup{%
bookmarksnumbered=true,%
colorlinks=true,%
setpagesize=false}

のように書けと書いてあったものですから,

\documentclass[a4paper]{jarticle}
% しおりは作られないようだ
\usepackage[dvipdfmx]{hyperref}
\usepackage{pxjahyper}
\hypersetup{%
implicit=false,%
bookmarks=true,%
bookmarksnumbered=false,%
bookmarksopen=false,%
colorlinks=true,%
linkcolor=blue,%
setpagesize=false}
\begin{document}
\section{First}
\hyperlink{labelgo}{ここから}
\section{Next}\label{sec:next}
\hypertarget{labelgo}{ここへ}
\section{Last}
\ref{sec:next}節(\pageref{sec:next}ページ)や
某Wiki\cite{texwiki}を参照。
\begin{thebibliography}{9}
\bibitem{texwiki}
{\TeX}~Wiki, Web content.\\
URL: \url{http://oku.edu.mie-u.ac.jp/~okumura/texwiki/}
\end{thebibliography}
\end{document}

を dvipdfmx 経由で処理してみましたら,ダメでした.リンクが自動的にできました.代わりにしおりはできましたが.

\documentclass[a4paper]{jarticle}
% しおりは作られないようだ
\usepackage[%
implicit=false,%
bookmarks=true,%
bookmarksnumbered=false,%
bookmarksopen=false,%
% colorlinks=true,%
linkcolor=blue,%
setpagesize=false]{hyperref}
\usepackage{pxjahyper}
\begin{document}
\section{First}
\hyperlink{labelgo}{ここから}
\section{Next}\label{sec:next}
\hypertarget{labelgo}{ここへ}
\section{Last}
\ref{sec:next}節(\pageref{sec:next}ページ)や
某Wiki\cite{texwiki}を参照。
\begin{thebibliography}{9}
\bibitem{texwiki}
{\TeX}~Wiki, Web content.\\
URL: \url{http://oku.edu.mie-u.ac.jp/~okumura/texwiki/}
\end{thebibliography}
\end{document}

を dvips 経由で処理したら,リンクは指定したものだけとなりました.しおりはうまくできませんでしたが.

難しいものですね.
匿 名 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 北川 弘典 の投稿

\usepackage[dvipdfmx,implicit=false]{hyperref}
\usepackage{pxjahyper}
\hypersetup{%
bookmarks=true,%
(省略)
}

のように,implicit=false を \hypersetup 内ではなく
hyperref パッケージ読み込み時に指定すれば良さそうです.
前田 一貴 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 匿 名 の投稿
前田様

質問致しました山下です.ご回答ありがとうございました.

教えて頂いた方法でうまくいきましたが,もしよろしければ更にお教え下さい.

\pageref や \cite も無効にする場合,どのような書き方をすればいいのでしょうか.今は手元に資料などがなく,

\AtBeginDocument{\DeclareRobustCommand

の使い方が調べられません.お手数ですがお教え下さい.

別に教えて頂きました Z.R. 様が提示頂いた例をいじり,

\documentclass[a4paper]{jarticle}
% しおりは作られないようだ
\usepackage[dvipdfmx]{hyperref}
\usepackage{pxjahyper}
\hypersetup{%
implicit=false,%
bookmarks=true,%
bookmarksnumbered=false,%
bookmarksopen=false,%
colorlinks=true,%
linkcolor=blue,%
setpagesize=false}
\makeatletter
\AtBeginDocument{\DeclareRobustCommand\ref{\@ifstar\@refstar\@refstar}}
\makeatother
\begin{document}
\section{First}
\hyperlink{labelgo}{ここから}
\section{Next}\label{sec:next}
\hypertarget{labelgo}{ここへ}
\section{Last}
\ref{sec:next}節(\pageref{sec:next}ページ)や
某Wiki\cite{texwiki}を参照。
\begin{thebibliography}{9}
\bibitem{texwiki}
{\TeX}~Wiki, Web content.\\
URL: \url{http://oku.edu.mie-u.ac.jp/~okumura/texwiki/}
\end{thebibliography}
\end{document}

を dvipdfmx 経由で処理したところ,しおりも作られ,\ref の動きも止まっていました.
あとは \pageref も \cite も止められればと思った次第です.

以上,よろしくお願い致します.
匿 名 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 前田 一貴 の投稿
なるほど,implicit=false だとしおりが作られないのですか…….

とりあえず無理矢理やるならこんな感じでしょうか.
implicit=false でしおりを追加するには,とか考えるよりはこちらの方が楽?

\documentclass[a4paper]{jsarticle}
\makeatletter
\let\ltx@bibcite\bibcite
\usepackage[bookmarks=true,dvipdfmx]{hyperref}
\AtBeginDocument{%
  \DeclareRobustCommand\ref{\@ifstar\@refstar\@refstar}
  \DeclareRobustCommand\pageref{\@ifstar\@pagerefstar\@pagerefstar}}
\let\bibcite\ltx@bibcite
\DeclareRobustCommand\url{\Hurl} % \url の自動リンクも止めたい場合
\makeatother
\begin{document}
\section{First}
\hyperlink{labelgo}{ここから}
\section{Next}\label{sec:next}
\hypertarget{labelgo}{ここへ}
\section{Last}
\ref{sec:next}節(\pageref{sec:next}ページ)や
某Wiki\cite{texwiki}を参照。
\begin{thebibliography}{9}
\bibitem{texwiki} {\TeX}~Wiki, Web content.\\
URL: \url{http://oku.edu.mie-u.ac.jp/~okumura/texwiki/}
\end{thebibliography}
\end{document}

前田 一貴 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 匿 名 の投稿
前田様

山下です.ご教示ありがとうございました.

うまく行きました.

\pageref は \DeclareRobustCommand を使うのに,\cite は違う方法なのですね.

この辺りの知識はありませんが,教えて頂いたことを少しずつ身につけていきたいと思います.
前田 一貴 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 匿 名 の投稿
前田様

山下です.先ほど問題は全て解決したようなコメントを書きましたが,コメント後にまだ自動リンクが張られるものがあることに気づきました.もう1点だけ教えて下さい.

\footnote も自動的にリンクが張られるようです.

よく分からないままに
\DeclareRobustCommand\footnote{\@ifstar\@footnotestar\@footnotestar}}
としてみたのですが,これではだめなようです.

お手数ですが,再度ご教示頂ければ幸いです.
匿 名 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 前田 一貴 の投稿
そもそもなんで自動リンクが嫌なのかがよくわかっていませんが.

footnote についてはオプションがあるみたいなので,それを使って下さい.
hyperfootnotes=false です.
前田 一貴 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 匿 名 の投稿
前田様

何度もありがとうございます.

hyperfootnotes=false

ですが,結論としてうまく行きませんでした.

長くなりますのでサンプルは末尾につけます.サンプルを dvipdfmx 経由で PDF 化したところ,footnote の自動リンクは作成されていました.

やはり,footnote コマンドを無効化するのがいいように思います.また,自分でも調べてみます.

ちなみに,自動リンクが嫌な理由ですが,いつでも嫌というわけではありません.

自動的な作成に任せると,結構多くのリンクができてしまいます.ついうっかりと余計なジャンプをしてしまうことがときどきあり,ジャンプしたら簡単には元の場所に戻れないため,いらいらすることがありました.

ほとんどジャンプする予定のないファイルでは,ジャンプできる場所を制限したいなと思ったのが,色々とお尋ねしている理由です.

最後に,うまく行かなかったサンプルです.

\documentclass[a4paper]{jarticle}
% しおりは作られないようだ
\makeatletter
\let\ltx@bibcite\bibcite
\usepackage[dvipdfmx]{hyperref}
\usepackage{pxjahyper}
\hypersetup{%
hyperfootnotes=false,%
bookmarks=true,%
bookmarksnumbered=false,%
bookmarksopen=false,%
colorlinks=true,%
linkcolor=blue,%
setpagesize=false}
\AtBeginDocument{%
\DeclareRobustCommand\ref{\@ifstar\@refstar\@refstar}
\DeclareRobustCommand\pageref{\@ifstar\@pagerefstar\@pagerefstar}}
\let\bibcite\ltx@bibcite
\DeclareRobustCommand\url{\Hurl} % \url の自動リンクも止めたい場合
\makeatother
\begin{document}
\section{First}
\hyperlink{labelgo}{ここから}.
\section{Next}\label{sec:next}
\hypertarget{labelgo}{ここへ}.おまけ\footnote{おまけとはプレゼント}
\section{Last}
\ref{sec:next}節(\pageref{sec:next}ページ)や
某Wiki\cite{texwiki}を参照。
\begin{thebibliography}{9}
\bibitem{texwiki}
{\TeX}~Wiki, Web content.\\
URL: \url{http://oku.edu.mie-u.ac.jp/~okumura/texwiki/}
\end{thebibliography}
\end{document}
匿 名 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 前田 一貴 の投稿
北川さんも前に同じようなことを書かれていますが,
\usepackage[dvipdfmx]{hyperref}

\usepackage[dvipdfmx,hyperfootnotes=false]{hyperref}
に変えてみて下さい.
LaTeX 命令の再定義処理はパッケージの読み込み時に行われるので,\hypersetup で指定しても効かないみたいです.
前田 一貴 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 匿 名 の投稿
前田様

山下です.ありがとうございました.

サンプルの例については

\usepackage[dvipdfmx,hyperfootnotes=false]{hyperref}

でうまくいきました.ただ,うまく行かない例もあるのですね.

別のファイルで,長すぎてサンプルを載せるのが大変なので割愛しますが,

! LaTeX Error: Option clash for package hyperref.

See the LaTeX manual or LaTeX Companion for explanation.
Type H for immediate help.
...

l.22 \usepackage
{pxjahyper}
?

というエラーメッセージが出て,コンパイルが途中で止まるものがあります.

ヘッダー部分に

\makeatletter
\let\ltx@bibcite\bibcite
\usepackage[dvipdfmx,hyperfootnotes=false]{hyperref}
\usepackage{pxjahyper}
\hypersetup{%
bookmarks=true,%
bookmarksnumbered=false,%
bookmarksopen=false,%
colorlinks=true,%
linkcolor=blue,%
setpagesize=false}
\AtBeginDocument{%
\DeclareRobustCommand\ref{\@ifstar\@refstar\@refstar}
\DeclareRobustCommand\pageref{\@ifstar\@pagerefstar\@pagerefstar}}
\let\bibcite\ltx@bibcite
\DeclareRobustCommand\url{\Hurl} % \url の自動リンクも止めたい場合
\makeatother

をいれたのですけど.

恐らく前田様に教えて頂いた方法で,footnote も自動リンクをつぶすしかないのでしょうね.

\DeclareRobustCommand を使うべきなのか,\let を使うべきなのか,よく分かりませんが,少しは自分でも頑張ってみようと思います.
匿 名 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 匿 名 の投稿
こんにちは

先に質問した山下です.少しは自分で頑張ってみたところ,できたような気がします.

ただ,他に悪影響が出ていないか気になりますので,このやり方で問題がないかどうか,お教え頂けませんでしょうか.

要するに,hyperref.dtx などを見ながら,
\let\ltx@footnotemark\@footnotemark
\let\ltx@footnotetext\@footnotetext

\let\@footnotemark\ltx@footnotemark
\let\@footnotetext\ltx@footnotetext
で挟めばいいのではないか,と思って実行ました.

以上,よろしくお願い致します.以下,サンプルです.

\documentclass[a4paper]{jarticle}
\makeatletter
\let\ltx@bibcite\bibcite
\let\ltx@footnotemark\@footnotemark
\let\ltx@footnotetext\@footnotetext
\ifx\kanjiskip\undefined\else
\usepackage{atbegshi}
\ifx\ucs\undefined
\ifnum 42146=\euc"A4A2
\AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}}
\else
\AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}}
\fi
\else
\AtBeginShipoutFirst{\special{pdf:tounicode UTF8-UCS2}}
\fi
\usepackage[dvipdfmx]{hyperref}
\fi
\usepackage{pxjahyper}
\hypersetup{%
bookmarks=true,%
bookmarksnumbered=false,%
bookmarksopen=false,%
colorlinks=true,%
linkcolor=blue,%
setpagesize=false}
\AtBeginDocument{%
\DeclareRobustCommand\ref{\@ifstar\@refstar\@refstar}
\DeclareRobustCommand\pageref{\@ifstar\@pagerefstar\@pagerefstar}}
\let\bibcite\ltx@bibcite
\let\@footnotemark\ltx@footnotemark
\let\@footnotetext\ltx@footnotetext
\DeclareRobustCommand\url{\Hurl} % \url の自動リンクも止めたい場合
\makeatother
\begin{document}
\section{First}
\hyperlink{labelgo}{ここから}.
\section{Next}\label{sec:next}
\hypertarget{labelgo}{ここへ}.おまけ\footnote{おまけとはプレゼント}
\section{Last}
\ref{sec:next}節(\pageref{sec:next}ページ)や
某Wiki\cite{texwiki}を参照。
\begin{thebibliography}{9}
\bibitem{texwiki}
{\TeX}~Wiki, Web content.\\
URL: \url{http://oku.edu.mie-u.ac.jp/~okumura/texwiki/}
\end{thebibliography}
\end{document}
匿 名 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 前田 一貴 の投稿
\ifHy@hyperfootnotes のところ(hyperfootnotes=true のときに実行される)に
\@footnotemark などを再定義するコードがあるので,そんな感じでいいのではないでしょうか.
悪影響についてはわかりませんが,使っていて何か問題があれば考えるということで.

返信していませんでしたが,
> ! LaTeX Error: Option clash for package hyperref.
というのは,たぶん hyperfootnotes=false をつけた hyperref の読み込みの前に,
どこかで hyperref を読み込んでいるのだと思います.
例えば,プリアンブルに2行続けて

\usepackage[dvipdfmx]{hyperref}
\usepackage[dvipdfmx,hyperfootnotes=false]{hyperref}

と書くと再現します.ログも見ながら探してみるとよいと思います.
hyperfootnotes=false で無効化できるならば,そちらの方が安全です(たぶん).
前田 一貴 への返信

Re: hyperref で指定した以外のリンクを作らない方法(再掲)

- 匿 名 の投稿
前田様

山下です.何度もありがとうございました.

> ! LaTeX Error: Option clash for package hyperref.
というのは,たぶん hyperfootnotes=false をつけた hyperref の読み込みの前に,
どこかで hyperref を読み込んでいるのだと思います.

既に前のファイルを消してしまったので検証できませんが,

\let\ltx@footnotemark\@footnotemark
\let\ltx@footnotetext\@footnotetext

などを消し,

\usepackage[dvipdfmx, hyperfootnotes=false]{hyperref}

を入れたら動きましたので,そうなんでしょうね.


教えて頂いてありがたいような,頑張ってみたけど実は楽な方法を先に教えてもらっていたのかと残念なような.

とにかく勉強になりました.