跳轉至內容

LaTeX/超連結

來自Wikibooks,開放世界中的開放書籍
(重定向自 LaTeX/Packages/Hyperref)

LaTeX

入門
  1. 簡介
  2. 安裝
  3. 安裝額外包
  4. 基礎
  5. 如何獲取幫助

常用元素

  1. 文件結構
  2. 文字格式
  3. 段落格式
  4. 顏色
  5. 字型
  6. 列表結構
  7. 特殊字元
  8. 國際化
  9. 旋轉
  10. 表格
  11. 標題建立
  12. 頁面佈局
  13. 自定義頁面頁首和頁尾‎
  14. 匯入圖形
  15. 浮動體,圖形和標題
  16. 腳註和邊注
  17. 超連結
  18. 標籤和交叉引用
  19. 首字母

機制

  1. 錯誤和警告
  2. 長度
  3. 計數器
  4. 盒子
  5. 規則和撐杆

技術文字

  1. 數學
  2. 高階數學
  3. 定理
  4. 化學圖形
  5. 演算法
  6. 原始碼列表
  7. 語言學

特殊頁面

  1. 索引
  2. 詞彙表
  3. 參考文獻管理
  4. 更多參考文獻

特殊文件

  1. 科學報告(學士報告,碩士論文,博士論文)
  2. 信件
  3. 簡報
  4. 教師專欄
  5. 簡歷
  6. 學術期刊(MLA,APA等)

建立圖形

  1. 介紹過程圖形
  2. MetaPost
  3. 圖片
  4. PGF/TikZ
  5. PSTricks
  6. Xy-pic
  7. 建立3D圖形

程式設計

  1. 純TeX
  2. 建立包
  3. 建立包文件
  4. 主題

其他

  1. 模組化文件
  2. LaTeX文件的協作編寫
  3. 匯出到其他格式

幫助和建議

  1. 常見問題解答
  2. 提示和技巧

附錄

  1. 作者
  2. 連結
  3. 包參考
  4. LaTeX示例文件
  5. 索引
  6. 命令詞彙表

編輯此框編輯TOC

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

[編輯 | 編輯原始碼]

用法

\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 captionlink 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.

當你使用\labelalign環境中時會出現。

可能的解決方案:將以下內容新增到你的前導部分

\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}

長標題和\listoffigures或長標題問題

[編輯 | 編輯原始碼]

當使用hyperref\listoffigures時,對於長標題或長標題存在問題。當標題(或標題)的長度超過頁面寬度(根據你的設定大約7-9個單詞)時,就會發生這種情況。要解決此問題,你需要在首次宣告時使用選項breaklinks

\usepackage[breaklinks]{hyperref}

然後,這將導致\listoffigures中的連結正確換行。

已存在的.toc、.lof和類似檔案問題

[編輯 | 編輯原始碼]

當你包含hyperref包時,latex生成的一些輔助檔案的格式會發生變化。因此,可能會遇到類似以下錯誤

! Argument of \Hy@setref@link has an extra }.

當文件第一次使用hyperref排版並且這些檔案已存在時。解決此問題的方法是刪除latex用於獲取正確引用並重新排版的所有檔案。

腳註和特殊字元問題

[編輯 | 編輯原始碼]

請參閱相關部分

Beamer問題

[編輯 | 編輯原始碼]

使用命令

\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]

註釋和參考文獻

[編輯 | 編輯原始碼]
  1. CTAN 中的 Hyperref 包網頁
  2. "使用 hyperref、url 包的電子郵件連結". comp.text.tex 使用者組. {{cite web}}: 未知引數 |accessmonthday= 被忽略 (幫助); 未知引數 |accessyear= 被忽略 (|access-date= 建議) (幫助)
  3. 其他可能的值在 hyperref 手冊 中定義
  4. http://www.ctan.org/tex-archive/macros/latex/contrib/hyperref/README
  5. CTAN 中的 Wrapfig 包網頁
  6. [1]Hyperref - 使用 LaTeX 的超連結頁面


上一頁:腳註和邊注 索引 下一頁:標籤和交叉引用
華夏公益教科書