別のファイルからの引用ができるようになるパッケージです.たとえば全く関係のない(\input
や\include
がされているわけではない)article1.texとarticle2.texというファイルがあっても,article1.tex内の\label
をarticle2.tex内で\ref
することができるようになります.
使い方
article1.texが
\documentclass{jlreq}
\begin{document}
\section{Introduction}\label{Introduction}
……
\end{document}
のようになっていたとします.この\label{Introduction}
をarticle2.tex内で引用するには,次のようにします.
\documentclass{jlreq}
\usepackage{xr}
\externaldocument{article1}% article1内の\labelを取り込む
\begin{document}
article1の節\ref{Introduction}において……
\end{document}
LaTeXで処理する際には,まずarticle1.texを(十分な回数)コンパイルします.その後article2.texをコンパイルすると,引用がなされます.(article2.texのみでは駄目なことに注意.)
ただし,これだとarticle2.tex内にも\label{Introduction}
があった場合はLabel `Introduction' multiply definedとなってしまいます.これを防ぐためにxrパッケージは接頭辞を付加する機能を持っています.たとえばarticle1.texからもってくる引用には1:
をつけるならば
\documentclass{jlreq}
\usepackage{xr}
\externaldocument[1:]{article1}
\begin{document}
article1の節\ref{1:Introduction}において…… % Introductionの前に1:をつけて引用する
\end{document}
とします.
zref-xrパッケージ
シンプルには上のようにxrパッケージで良いのですが,これはhyperrefパッケージと使うといまいちです.hyperrefパッケージは引用先へのリンクを張りますが,上の状況でhyperrefパッケージを使ってもarticle1.tex内のIntroductionには飛んでくれません.(実際にやるととんちんかんなところへ飛んでしまいます.)また,article1でhyperrefを読み込んでいるけどarticle2では読み込んでいない,とするとバグります.これをどうにかしているxr-hyperというパッケージがありますが,更にそれがすごくなった(多分)zref-xrパッケージがあります.名前からわかるとおりzrefパッケージの一部(xrモジュール)です.
使い方はxrパッケージとよく似ています.
% article1.tex
\documentclass[dvipdfmx]{jlreq} % dvipdfmxはhyperrefのため
\usepackage{hyperref}
\begin{document}
\section{Introduction}\label{Introduction}
……
\end{document}
% article2.tex
\documentclass[dvipdfmx]{jlreq} % dvipdfmxはhyperrefのため
\usepackage{hyperref}
\usepackage{nameref} % これが\zexternaldocumentの前までに必要
\usepackage{zref-xr}
\zxrsetup{toltxlabel} % 通常のLaTeXスタイルの\refを使う(\zexternaldocumentより前におく)
\zexternaldocument*[1:]{article1} % \zのついたexternaldocumentを使う
\begin{document}
article1の節\ref{1:Introduction}において……
\end{document}
これでarticle2.pdfからarticle1.pdfに飛べるはずです.ちなみにarticle1.tex内のhyperrefの読み込みはなくても動きますが,このときはリンクがなくなります.つまり,リンクを機能させるには参照する方とされる方双方でhyperrefパッケージの読み込みが必要です.
リンク先の変更
リンク先として選ばれるファイルは,\zexternaldocument
で指定されたファイル名の拡張子を.pdfとしたものになります.これを変更するには,
\zexternaldocument*[1:]{article1}[article3.pdf]
とします.
相互参照システムについて
zrefパッケージは通常LaTeXとは独立した相互参照システムを持っていて,zref-xrパッケージでもデフォルトではその相互参照システムが使われます.これをやめてLaTeXの相互参照システム(つまり普通の\label
と\ref
等による相互参照)を使うために,上では
\zexternaldocument
を*
付きで呼び出すことで,参照される方(article1.tex内のラベル)で通常のシステムを使うことに\zxrsetup{toltxlabel}
により参照する方(article2.tex内)で通常のシステムを使うことに
\zlabel
と\zref
を使います.
% article1.tex
\documentclass{jlreq}
\usepackage{zref-user} % zref-userを読み込む
\begin{document}
\section{Introduction}\zlabel{Introduction} % labelの代わりにzlabelを使う
……
\end{document}
% article2.tex
\documentclass{jlreq}
\usepackage{zref-xr,zref-user}
\zexternaldocument[1:]{article1}
\begin{document}
article1の節\zref{1:Introduction}において…… % \zrefを使う
\end{document}
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です