hyperref 似乎不能与或\_
的第一个参数一起使用:hypertarget
hyperlink
\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}