如何防止超链接中的 : 扩展?

如何防止超链接中的 : 扩展?

我正在尝试创建一个简单的环境来输入一篇论文的(个人)评论并对其进行交叉引用,使用以下命令:

\newenvironment{articlereview}[2][]{%
  \hypertarget{review:#2}{\textcolor{blue}{\texttt{#2:}}}\cite{#2} (#1)
}{
  \medskip
}
\newcommand\linktoreview[1]{\hyperlink{review:#1}{\nolinkurl{#1}}}

然后我这样使用它们:

\begin{articlereview}[date]{nice:paper}
My review...
\end{articlereview}

See review of paper \linktoreview{nice:paper}

问题是由于某种原因,我无法摆脱:中的特殊字符扩展\linktoreview,并且出现类似的错误:

 name{review:nice\\unskip\040\\penalty\040\\@M\040\040:paper}  has been referenced but does not exist, replaced by a fixed one

我做错了什么?

编辑 这是一个最小(非)工作示例:

\documentclass{article}

\usepackage[french]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}


\bibliographystyle{unsrt}

\newenvironment{articlereview}[2][]{%
  \hypertarget{review:#2}{\texttt{#2:}}\cite{#2} (#1)
}{
  \medskip
}
\newcommand\linktoreview[1]{\hyperlink{review:#1}{\nolinkurl{#1}}}

\begin{document}
\begin{articlereview}[date]{nice:paper}
My review...
\end{articlereview}

See review of paper \linktoreview{nice:paper}

\bibliography{Biblio}

\end{document}

正如 David Carlisle 所说,如果我注释掉该babel行,那么一切都会顺利。问题如下:nice:paper是文件中的引用(嗯,很多).bib,我不会更改它们。手动包装每个使用:也是不可能的(有数百个!),感觉“应该可以让它工作”(因为它可以与其他标签一起使用)。

答案1

您可以对标签/锚点参数进行去标记化:

\documentclass{article}

\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{hyperref}


\bibliographystyle{unsrt}

\newenvironment{articlereview}[2][]{%
  \expandafter\hypertarget\expandafter{\detokenize{review:#2}}{\texttt{#2:}}\cite{#2} (#1)
}{
  \medskip
}
\newcommand\linktoreview[1]{\expandafter\hyperlink\expandafter{\detokenize{review:#1}}{\nolinkurl{#1}}}

\begin{document}
\begin{articlereview}[date]{nice:paper}
My review...
\end{articlereview}



See review of paper \linktoreview{nice:paper}

\bibliography{Biblio}

\end{document}

相关内容