\section 中的 \href 宏与 ToC 中的本地超链接冲突

\section 中的 \href 宏与 ToC 中的本地超链接冲突

如果我有像这样的部分

\section{Section 1}

然后在目录中,只要我使用该hyperref包,它就会链接到该特定部分。但是,如果我使用 href 标签作为部分名称,就像这样

\section{\href{http://www.google.com}{Section 1}}

在目录中,它直接转到 google.com(这不是我想要的),而不是第 1 节(我想要的)。有没有办法,当我单击节标题时,它会转到链接,但当我单击目录中的节时,它会转到节(而不是链接)?

最小示例

\documentclass{article}

\usepackage{hyperref}
\usepackage{xspace}

\hypersetup{colorlinks=true, 
   linkcolor=[rgb]{0.192157,0.309804,0.309804},
   urlcolor=cyan, 
   citecolor=blue}

\newcommand{\latex}{\LaTeX\xspace}

\begin{document}
   \title{Minimal \latex\ Example}
   \date{}
   \vspace{65 mm}
   \author{Julius Caesar}

   \maketitle

   \clearpage

   \tableofcontents

   \clearpage

   \section{Section 1}
   \label{sec:one}
   Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

   \section{\href{http://www.google.com}{Section 2}}
   \label{sec:two}
   Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum


\end{document}

答案1

一旦您知道每个标题命令都采用一个可选参数,就可以解决这个问题toc

就你的情况而言,你可以使用例如

   \section[Section 2 in toc]{\href{http://www.google.com}{Section 2}}

这是一个完整的最小工作示例(MWE)。

\documentclass{article}

\usepackage{hyperref}

\hypersetup{colorlinks=true, 
   linkcolor=[rgb]{0.192157,0.309804,0.309804},
   urlcolor=cyan, 
   citecolor=blue}


\begin{document}
   \title{Minimal Example}
   \author{Julius Caesar}

   \maketitle

   \clearpage

   \tableofcontents

   \clearpage

   \section{Section 1}
   \label{sec:one}
   Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

   \section[Section 2 in toc]{\href{http://www.google.com}{Section 2}}
   \label{sec:two}
   Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum


\end{document}
%

答案2

休斯' 答案也是我首先想到的。但这是一个相当手动的解决方案。

通过\let适应\href\@secondoftwo定义变为

\renewcommand{\href}[2]{#2}

(我们完全可以在没有任何实际知识的情况下做到这一点\@secondoftwo)。

.toc文件和目录仍然包含\href{www.google.com}{Section 2}\href随后扩展Section 2为其第二个参数。

将其括在内\begingroup … \endgroup可使更改保留在\href本地。(不过,还有其他方法可以在不使用此分组的情况下\killHref恢复的原始定义。)\href


如果你选择的编辑器给你带来麻烦,可以替换

\makeatletter
\newcommand*{\killHref}[1]{\begingroup\let\href\@secondoftwo#1\endgroup}
\makeatother

\newcommand*{\killHref}[1]{\begingroup\renewcommand{\href}[2]{##2}#1\endgroup}

参考

代码

\documentclass{article}
\usepackage{hyperref}
\usepackage{lipsum}
\hypersetup{colorlinks=true, 
   linkcolor=[rgb]{0.192157,0.309804,0.309804},
   urlcolor=cyan, 
   citecolor=blue}

\makeatletter
\newcommand*{\killHref}[1]{\begingroup\let\href\@secondoftwo#1\endgroup}
\makeatother
\begin{document}
    \killHref{\tableofcontents}
    \section{Section 1}
    \lipsum[1]
    \section{\href{http://www.google.com}{Section 2}}
    \lipsum[2]
\end{document}

输出

在此处输入图片描述

相关内容