超链接和下划线

超链接和下划线

hyperref 似乎不能与或\_的第一个参数一起使用:hypertargethyperlink

 \hypertarget{foo\_}{foo\_}
 \hyperlink{foo\_}{foo\_}

单击超链接时,它总是跳转到文档的开头。我通过删除\_或例如写入来获得正确的行为

 \hypertarget{foo_}{foo\_}
 \hyperlink{foo_}{foo\_}

问题是这两个函数被用作自定义命令的一部分,而自定义命令要求两个参数相同。

\newcommand{\mytarget}[1]{\hypertarget{#1}{#1}}
\newcommand{\mylink}[1]{\hyperlink{#1}{#1}}

我尝试使用以下方法删除第一个参数中的下划线

\newcommand{\mytarget}[1]{\hypertarget{\StrSubstitute{#1}{\_}{dummy}}{#1}}
\newcommand{\mylink}[1]{\hyperlink\StrSubstitute{#1}{\_}{dummy}}{#1}}

但它给出了一个编译错误。是否可以更新两个 hyperref 命令,以便在第一个参数中替换一些字符?

答案1

您必须事先进行替换:

\documentclass{article}

\usepackage{lipsum} % just for the example
\usepackage{xstring}
\usepackage{hyperref}

\newcommand{\makesub}[1]{%
  \saveexpandmode\noexpandarg
  \StrSubstitute{#1}{\_}{_}[\temp]%
  \restoreexpandmode
}
\newcommand{\mytarget}[1]{%
  \makesub{#1}%
  \hypertarget{\temp}{#1}%
}
\newcommand{\mylink}[1]{%
  \makesub{#1}%
  \hyperlink{\temp}{#1}%
}

\begin{document}

\mytarget{foo\_bar}
\lipsum

\mylink{foo\_bar}

\end{document}

相关内容