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