跳轉到內容

LaTeX/超連結

來自華夏公益教科書,自由的教科書,為了一個自由的世界

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. 規則和支撐

技術文字

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

特殊頁面

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

特殊文件

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

建立圖形

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

程式設計

  1. Plain 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} 的效果相同,但它將使文字 link text 變成一個完整的連結。兩者可以結合使用。如果標記為 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 分別是在目標位置和連結位置顯示的文字。

還要注意,如果你放置了超目標,單擊連結到該超目標時,它實際上可能會指向超目標後的行,這並不理想。因此,如果發生這種情況,你可以報告錯誤並參考 此處 以瞭解解決方案。

在瀏覽器中檢視
[編輯 | 編輯原始碼]

你還可以透過將 #label 附加到檔案的 URL 來獲取超目標的外部連結,或者右鍵單擊指向目標的超連結之一併複製 URL,或者從 PDF 側邊欄中的標題獲取連結,或者透過從檢視中推斷的過程(例如,子節 11.5.1 將具有標籤 subsubsection.11.5.1)。這在學術和教學目的中非常有用。如果你在瀏覽器中啟用與 PDF 1.5 相容的 PDF 檢視器,例如 Chrome 或 Chromium 瀏覽器的 PDF 檢視器 和 Firefox 的 No PDF Download;以及在 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 大列表

變數 評論
bookmarks =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},etc[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 連結周圍框架的顏色

請注意,顯式 RGB 規範僅適用於邊框顏色(如 linkbordercolor 等),而其他顏色只能分配給命名顏色(你可以定義自己的顏色,請參閱 Colors)。為了加快自定義過程,以下列出了帶預設值的變數。將它複製到你的文件中並進行你想要的更改。變數旁邊是對其含義的簡短說明

\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,就會出現方程式識別符號的問題。在這種情況下,請使用帶星號的形式,例如 \{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 或長標題的問題

[編輯 | 編輯原始碼]

在使用 \listoffigureshyperref 時,如果標題過長或標題過長,就會出現問題。這種情況發生在標題(或標題)的長度超過頁面寬度(根據你的設定,大約 7-9 個單詞)。為了解決這個問題,你需要在第一次宣告時使用選項 breaklinks

\usepackage[breaklinks]{hyperref}

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

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

[編輯 | 編輯原始碼]

當包含 hyperref 包時,latex 生成的某些輔助檔案的格式會發生變化。因此,當第一次使用 hyperref 排版文件時,如果這些檔案已經存在,則可能會遇到類似以下的錯誤。

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

解決方法是刪除 latex 用於獲取正確引用而使用的所有檔案,然後重新排版。

腳註和特殊字元問題

[編輯 | 編輯原始碼]

請參閱 相關部分

Beamer 問題

[編輯 | 編輯原始碼]

使用命令

\hyperref[some_label]{some text}

指向標籤時會出錯。點選時,使用者不會被髮送到目標標籤,而是會被髮送到第一幀。有一個簡單的解決方法;不要使用

\phantomsection\label{some_label}

為你的框架新增標籤,請使用

\hypertarget{some_label}{}

並用它作為參考

\hyperlink{some_label}{some text}

草稿模式問題

[編輯 | 編輯原始碼]

警告! 請注意,如果您在 \documentclass 宣告中啟用了“draft”選項,則超連結將不會顯示在目錄或其他任何地方!

透過在包含包之後立即使用 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 的超連結頁面


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