LaTeX/超連結
LaTeX 允許排版超連結,當輸出格式為 PDF 時非常有用,並且可以跟蹤超連結。它使用hyperref包來實現。
hyperref[1]包為LaTeX提供了建立文件內超連結的能力。它適用於pdflatex,也適用於與dvips和ghostscript或dvipdfm一起使用的標準“latex”來構建PDF檔案。如果您載入它,您將有可能包含互動式外部連結,並且所有內部引用都將轉換為超連結。編譯器pdflatex可以從LaTeX原始碼直接建立PDF檔案,並且PDF支援比DVI更多的功能。特別是PDF支援超連結。此外,PDF可以包含有關文件的其他資訊,例如標題、作者等,這些資訊可以使用同一個包進行編輯。
使用標準設定的基本用法非常簡單。只需在序言中載入包
\usepackage{hyperref}
|
這將自動將所有內部引用轉換為超連結。它不會影響您編寫文件的方式:只需繼續使用標準的\label-\ref系統(在關於標籤和交叉引用的章節中討論);使用hyperref,這些“連線”將變成連結,您可以單擊它們以重定向到正確的頁面。此外,目錄、圖形/表格列表和索引也將由超連結組成。如果您在草稿模式下工作,超連結將不會顯示。
該包提供了一些用於插入指向文件外部的連結的有用命令。
用法
\hyperref[label_name]{''link text''}
|
這將與\ref{label_name}具有相同的效果,但會使文字連結文字成為一個完整的連結。兩者可以結合使用。如果標記為mainlemma的引理是4.1.1,則以下示例將產生
We use \hyperref[mainlemma]{lemma \ref*{mainlemma} }.
|
我們使用引理4.1.1。 |
並如期顯示超連結。請注意\ref後面的“*”,用於避免巢狀超連結。
用法
\url{<my_url>}
|
它將使用等寬字型顯示URL,並且如果您單擊它,瀏覽器將開啟並指向它。
用法
\href{<my_url>}{<description>}
|
它將使用標準文件字型顯示字串description,但是,如果您單擊它,瀏覽器將開啟並指向my_url。這是一個例子
\url{https://www.wikibooks.org}
\href{https://www.wikibooks.org}{Wikibooks home}
|
兩者都指向同一頁面,但在第一種情況下將顯示URL,而在第二種情況下URL將被隱藏。請注意,如果您列印文件,則使用\href儲存的連結不會顯示在文件中的任何位置。
除了上面討論的連結到網站之外,hyperref還可以用於提供mailto連結、本地檔案連結以及PDF輸出檔案內任何位置的連結。
插入電子郵件連結的一種可能方法是
\href{mailto:my_address@wikibooks.org}{my\_address@wikibooks.org}
|
它只會顯示你的電子郵件地址(這樣即使文件列印在紙上,人們也能看到),但如果讀者點選它,他/她可以輕鬆地給你傳送電子郵件。或者,要將url包的格式化和換行功能整合到顯示的文字中,可以使用[2]。
\href{mailto:my_address@wikibooks.org}{\nolinkurl{my_address@wikibooks.org} }
|
使用此表單時,請注意\nolinkurl命令很脆弱,如果超連結位於移動引數內,則必須在其前面加上\protect命令。
也可以使用url或href命令連結檔案。你只需要在連結字串的開頭新增字串run:
\url{run:/path/to/my/file.ext}
\href{run:/path/to/my/file.ext}{text displayed}
|
根據http://tex.stackexchange.com/questions/46488/link-to-local-pdf-file,使用url的方法並不總是有效,但是href是有效的。
可以使用相對路徑來連結當前文件附近的檔案;為此,請使用標準的類 Unix 表示法(./是當前目錄,../是上級目錄,等等)。
示例
\href{run:D:/my_folder/my_subfolder/my_file.txt}{Windows, absolute path}
\href{run:my_subfolder/my_file.txt}{Windows, relative path}
\href{run:./my_subfolder/my_file.txt}{Windows, relative path, variant}
\href{run:/my_folder/my_subfolder/my_file.txt}{Linux, absolute path}
\href{run:./my_subfolder/my_file.txt}{Linux, relative path}
|
還可以建立文件中任何位置的錨點(有或沒有標題),並連結到它。要建立錨點,請使用
\hypertarget{label}{target caption}
|
要連結到它,請使用
\hyperlink{label}{link caption}
|
其中target caption和link caption分別是目標位置和連結位置顯示的文字。
另請注意,如果放置了超目標,當點選指向該超目標的連結時,它實際上可能會指向超目標後的行,這並非我們期望的結果。因此,如果發生這種情況,可以報告錯誤並參考此處以獲取解決方案。
還可以獲取指向超目標的外部URL,方法是在檔案的URL後面新增#label,或者右鍵單擊指向目標的超連結之一併複製URL,或者從PDF側邊欄的標題中獲取連結,或者透過從檢視中推斷的過程(例如,子子節11.5.1將具有標籤subsubsection.11.5.1)。這對於學術和教學目的很有用。如果你在瀏覽器中啟用與PDF 1.5相容的PDF檢視器(例如Chrome或Chromium瀏覽器的PDF檢視器和Firefox的無PDF下載),則該URL將指向目標;在Android上,Xodo應用程式最適合使用連結,因為它會以與PDF桌面程式相同的正確邊框呈現它們,其次是Foxit PDF應用程式,它將連結以灰色突出顯示(而在其他應用程式中,連結也可能起作用,但沒有任何特殊呈現,例如Dropbox PDF檢視器應用程式;而其他一些則不適用於連結,例如Drive PDF檢視器、PDF閱讀器和Google PDF檢視器)。你可能需要在新標籤頁中開啟指向PDF的URL,否則它可能會提示你下載它(即,如果你正在點選URL,請不要左鍵單擊,右鍵單擊並選擇在新標籤頁中開啟它)。
標準設定對於大多數使用者來說應該足夠了,但如果想要更改某些內容,這也是可能的。有幾個變數和兩種方法可以將這些變數傳遞給包。在載入包時,可以將其作為包的引數傳遞(包的標準工作方式),或者可以使用\hypersetup命令,如下所示
\hypersetup{<option1> [, ...]}
|
可以傳遞任意多個選項;用逗號分隔它們。選項必須採用以下格式
variable_name=new_value
|
如果在載入包時將這些選項傳遞給包,則必須使用完全相同的格式,如下所示
\usepackage[<option1, option2>]{hyperref}
|
以下是可以更改的可能變數列表(完整列表請參閱官方文件)。預設值以直立字型顯示
檢視tug.org上的hyperref-manual中的3.8大列表
| 變數 | 值 | 註釋 |
|---|---|---|
| 書籤 | =true,false | 顯示或隱藏顯示文件時的書籤欄 |
| unicode | =false,true | 允許在Acrobat的書籤中使用非拉丁語系字元 |
| pdfborder | ={RadiusH RadiusV Width [Dash-Pattern]} | 設定連結周圍邊框的樣式。前兩個引數(RadiusH、RadiusV)在大多數pdf檢視器中沒有效果。Width定義邊框的粗細。Dash-Pattern是一系列用空格分隔並用方括號括起來的數字。這是一個可選引數,用於指定虛線圖案中每條線和間隙的長度。例如,{0 0 0.5 [3 3]}應該繪製一個寬度為0.5的正方形框(沒有圓角)和一個虛線圖案,該圖案包含長度為3的短劃線,後跟長度為3的間隙。不同的pdf檢視器是否/如何呈現虛線圖案沒有統一性。 |
| pdftoolbar | =true,false | 顯示或隱藏Acrobat的工具欄 |
| pdfmenubar | =true,false | 顯示或隱藏Acrobat的選單 |
| pdffitwindow | =true,false | 調整文件視窗大小以適合文件大小 |
| pdfstartview | ={FitH},{FitV}等[3]。 | 將頁面寬度調整為視窗寬度 |
| pdftitle | ={text} | 定義在Acrobat的“文件資訊”視窗中顯示的標題 |
| pdfauthor | ={text} | PDF作者的姓名,其工作方式與上述相同 |
| pdfsubject | ={text} | 文件的主題,其工作方式與上述相同 |
| pdfcreator | ={text} | 文件的建立者,其工作方式與上述相同 |
| pdfproducer | ={text} | 文件的製作方,其工作方式與上述相同 |
| pdfkeywords | ={text} | 關鍵字列表,用逗號分隔,示例如下 |
| pdfnewwindow | (=true,false) | 定義當連結指向當前文件外部時是否應開啟新的PDF視窗。注意:如果連結指向http/https地址,則會忽略此選項。 |
| pagebackref | (=false,true) | 啟用參考文獻中的反向引用。必須作為\usepackage{}語句的一部分指定。 |
| colorlinks | (=false,true) | 用彩色邊框包圍連結(false)或對連結的文字進行著色(true)。可以使用以下選項配置這些連結的顏色(顯示預設顏色) |
| hidelinks | 隱藏連結(刪除顏色和邊框) | |
| linkcolor | =red | 內部連結(章節、頁面等)的顏色 |
| linktoc | =none,section,page,all | 定義目錄條目中哪個部分將被製作成連結 |
| citecolor | =green | 引用連結(參考文獻)的顏色 |
| filecolor | =cyan | 檔案連結的顏色 |
| urlcolor | =magenta | URL連結(郵件、網路)的顏色 |
| linkbordercolor | ={1 0 0} | 內部連結周圍邊框的顏色(如果colorlinks=false) |
| citebordercolor | ={0 1 0} | 引用周圍邊框的顏色 |
| urlbordercolor | ={0 1 1} | URL連結周圍邊框的顏色 |
請注意,只有邊框顏色(如linkbordercolor等)才允許顯式RGB規範,而其他顏色只能分配給命名顏色(可以自定義自己的顏色,請參閱顏色)。為了加快自定義過程,這裡列出了帶有預設值的變數。將其複製到文件中並進行所需的更改。在變數旁邊,是對其含義的簡要說明
\hypersetup{
bookmarks=true, % show bookmarks bar?
unicode=false, % non-Latin characters in Acrobat’s bookmarks
pdftoolbar=true, % show Acrobat’s toolbar?
pdfmenubar=true, % show Acrobat’s menu?
pdffitwindow=false, % window fit to page when opened
pdfstartview={FitH}, % fits the width of the page to the window
pdftitle={My title}, % title
pdfauthor={Author}, % author
pdfsubject={Subject}, % subject of the document
pdfcreator={Creator}, % creator of the document
pdfproducer={Producer}, % producer of the document
pdfkeywords={keyword1, key2, key3}, % list of keywords
pdfnewwindow=true, % links in new PDF window
colorlinks=false, % false: boxed links; true: colored links
linkcolor=red, % color of internal links (change box color with linkbordercolor)
citecolor=green, % color of links to bibliography
filecolor=cyan, % color of file links
urlcolor=magenta % color of external links
}
|
如果不需要如此高階的自定義,這裡有一些較小的但有用的示例。在建立用於列印的PDF時,彩色連結不是一個好主意,因為它們最終會在最終輸出中變為灰色,從而難以閱讀。可以使用彩色邊框,這些邊框不會被列印
\usepackage{hyperref}
\hypersetup{colorlinks=false}
|
或使連結變為黑色
\usepackage[hidelinks]{hyperref}
|
或使用 \usepackage{hyperref} \hypersetup{hidelinks}
當只需要為PDF檔案的“文件資訊”部分提供資訊,以及啟用參考文獻中的反向引用時
\usepackage[pdfauthor={Author's name},%
pdftitle={Document Title},%
pagebackref=true,%
pdftex]{hyperref}
|
預設情況下,URL 使用等寬字型列印。如果你不喜歡它並希望它們以與文字其餘部分相同的樣式列印,可以使用以下方法
\urlstyle{same}
|
當你執行以下操作時,會出現以下訊息
! pdfTeX warning (ext4): destination with the same identifier (name{
equation.1.7.7.30}) has been already used, duplicate ignored
例如
\begin{eqnarray}a=b\nonumber\end{eqnarray}
|
如果使用以下形式,則錯誤將消失
\begin{eqnarray*}a=b\end{eqnarray*}
|
注意,顯示的行號通常與錯誤行完全不同。
可能的解決方案:將amsmath包放在hyperref包之前。
當你執行以下操作時,會出現以下訊息
! Runaway argument?
{\@firstoffive }\fi ), Some text from your document here (\ref {re\ETC.
Latex Error: Paragraph ended before \Hy@setref@link was complete.
當你使用\label在align環境中時會出現。
可能的解決方案:將以下內容新增到你的前導部分
\AtBeginDocument{\let\textlabel\label}
|
注意:如果你使用冒號“:”作為標籤的一部分,例如\label{lst:program01},也會出現同樣的錯誤。替換它將會有所幫助。
當你執行以下操作時,會出現以下訊息
! pdfTeX warning (ext4): destination with the same
identifier (name{page.1}) has been already used,
duplicate ignored
當計數器被重新初始化時會出現,例如使用book文件類提供的命令\mainmatter。它在書籍的第一章之前將頁碼計數器重置為1。但是由於書籍的前言也具有頁碼1,因此所有指向“第1頁”的連結將不再唯一,因此會出現“已忽略重複項”的提示。解決方法是在hyperref選項中加入plainpages=false。不幸的是,這僅對頁碼計數器有效。更徹底的解決方案是使用選項hypertexnames=false,但這會導致索引中的頁面連結停止工作。
最好的解決方案是使用\pagenumbering命令為每個頁面賦予唯一的名稱
\pagenumbering{alph} % a, b, c, ...
... titlepage, other front matter ...
\pagenumbering{roman} % i, ii, iii, iv, ...
... table of contents, table of figures, ...
\pagenumbering{arabic} % 1, 2, 3, 4, ...
... beginning of the main matter (chapter 1) ...
|
另一種解決方案是在命令\maketitle之前使用\pagenumbering{alph},這將使標題頁的標籤為page.a。由於頁碼被抑制,因此它不會對輸出產生影響。
透過在每次計數器重置之前更改頁碼,每個頁面都會獲得一個唯一的名稱。在這種情況下,頁面將被編號為a、b、c、i、ii、iii、iv、v、1、2、3、4、5……
如果你不想顯示頁碼(例如,在前言部分),可以使用\pagestyle{empty} ... \pagestyle{plain}。重要的是,儘管數字不可見,但每個頁面都將擁有一個唯一的名稱。
另一種更靈活的方法是將計數器設定為負數
\setcounter{page}{-100}
... titlepage, other front matter ...
\pagenumbering{roman} % i, ii, iii, iv, ...
... table of contents, table of figures, ...
\pagenumbering{arabic} % 1, 2, 3, 4, ...
... beginning of the main matter (chapter 1) ...
|
這將為前幾頁提供唯一的負數編號。
問題也可能出現在演算法包中:因為每個演算法都使用相同的行號方案,所以第二個及後續演算法的行識別符號將與第一個演算法的重複。
如果你在eqnarray環境的每一行都使用\nonumber,則公式識別符號會出現此問題。在這種情況下,請改用帶星號的形式,例如\begin{eqnarray*} ... \end{eqnarray*}(這是一個未編號的公式陣列),並刪除現在不再需要的\nonumber命令。
如果你的URL太長,超出頁面範圍,請嘗試使用breakurl包將URL拆分為多行。這在多列環境中尤其重要,因為在多列環境中,行寬會大大縮短。
書籤顯示的文字並不總是像你期望的那樣。因為書籤“只是文字”,所以書籤可用的字元比普通LaTeX文字少得多。Hyperref通常會注意到此類問題併發出警告
Package hyperref Warning: Token not allowed in a PDFDocEncoded string:
你現在可以透過為書籤提供一個文字字串來解決此問題,該字串將替換有問題的文字
\texorpdfstring{''TEX text''}{''Bookmark Text''}
|
數學表示式是此類問題的主要來源
\section{ \texorpdfstring{$E=mc^2$}{E=mc2} }
|
它將\section{$E=mc^2$}更改為E=mc2在書籤區域。顏色更改也不適用於書籤
\section{ \textcolor{red}{Red !} }
|
生成字串“redRed!”。命令\textcolor被忽略,但其引數(red)會被列印。如果你使用
\section{ \texorpdfstring{\textcolor{red}{Red !}}{Red\ !} }
|
結果將更易讀。
如果你使用unicode編寫文件,併為hyperref包使用unicode選項,則可以在書籤中使用unicode字元。這將為你提供更多字元選擇,以便在使用\texorpdfstring時使用。
hyperref建立的連結指向在浮動環境中建立的標籤,正如前面所述,該標籤必須始終設定在標題之後。由於標題通常位於圖形或表格下方,因此單擊連結時將無法看到圖形或表格本身[4]。解決方法是使用hypcap包[2],以及
\usepackage[all]{hypcap}
|
請確保在載入hyperref之後呼叫此包。
如果你使用wrapfig包[5](在“浮動體、圖形和標題”章節的“將文字環繞圖形”部分中提到),或其他定義自身環境的類似包,則需要在這些環境中手動包含\capstart,例如
\begin{wrapfigure}{R}{0.5\textwidth}
\capstart
\begin{center}
\includegraphics[width=0.48\textwidth]{filename}
\end{center}
\caption{\label{labelname}a figure}
\end{wrapfigure}
|
當使用hyperref的\listoffigures時,對於長標題或長標題存在問題。當標題(或標題)的長度超過頁面寬度(根據你的設定大約7-9個單詞)時,就會發生這種情況。要解決此問題,你需要在首次宣告時使用選項breaklinks
\usepackage[breaklinks]{hyperref}
|
然後,這將導致\listoffigures中的連結正確換行。
當你包含hyperref包時,latex生成的一些輔助檔案的格式會發生變化。因此,可能會遇到類似以下錯誤
! Argument of \Hy@setref@link has an extra }.
當文件第一次使用hyperref排版並且這些檔案已存在時。解決此問題的方法是刪除latex用於獲取正確引用並重新排版的所有檔案。
請參閱相關部分。
使用命令
\hyperref[some_label]{some text}
|
當指向標籤時會發生錯誤。點選後,使用者不會被髮送到所需的標籤,而是會被髮送到第一個框架。存在一個簡單的解決方法;不要使用
\phantomsection\label{some_label}
|
來標記你的框架,而是使用
\hypertarget{some_label}{}
|
並用
\hyperlink{some_label}{some text}
|
警告!請注意,如果您在 \documentclass 宣告中啟用了“草稿”選項,則超連結將不會顯示在目錄中,或者任何其他地方!
可以透過在包含包之後,在 hyperref 包的以下初始化中使用“final=true”選項來重新啟用超連結。
\usepackage{hyperref}
\hypersetup{final=true}
|
可以在此處找到 hyperref 包的其他選項的良好來源 [6]。
- ↑ CTAN 中的 Hyperref 包網頁
- ↑ "使用 hyperref、url 包的電子郵件連結". comp.text.tex 使用者組.
{{cite web}}: 未知引數|accessmonthday=被忽略 (幫助); 未知引數|accessyear=被忽略 (|access-date=建議) (幫助) - ↑ 其他可能的值在 hyperref 手冊 中定義
- ↑ http://www.ctan.org/tex-archive/macros/latex/contrib/hyperref/README
- ↑ CTAN 中的 Wrapfig 包網頁
- ↑ [1]Hyperref - 使用 LaTeX 的超連結頁面
