我想剪切 Bibtex 文件中定义的 URL 标签。例如,我想裁剪前缀“mailto:”,这样它就不会显示出来。但超链接仍然必须包含它。以下命令在文档环境中有效,但对于参考书目条目无效。他们需要特别注意吗?
梅威瑟:
\documentclass{scrreprt}
\usepackage{hyperref}
\usepackage{xstring}
\let\oldUrl\url
\renewcommand{\url}[1]{
\StrBehind{#1}{:}[\tempa]
\StrBefore{#1}{:}[\tempb]
\IfBeginWith{\tempb}{mailto}
{\href{#1}{\nolinkurl{\tempa}}}
{\oldUrl{#1}}
}
\usepackage[
backend=biber,
style=alphabetic
]{biblatex}
\addbibresource{test.bib}
\begin{document}
\url{mailto:[email protected]}
\nocite{*}
\printbibliography
\end{document}
Bibtex 文件:
@MANUAL{ABC,
title = {Test Title},
author = {ABC},
url = {mailto:[email protected]}
}
输出:
它对 note 标签有效,但对 url 标签无效,因为 note 标签中使用了 url 宏(使用 bibtex 引擎而不是 biber 引擎发现,因为 bibtex 不提供 url 标签):
@MANUAL{ABC,
title = {Test Title},
author = {ABC},
url = {mailto:[email protected]}
note = {\url{mailto:[email protected]}}
}
我的第一个结论:biber 不使用 url 宏来创建超链接,但是为什么 url 宏重新定义中的 \IfBeginWith 宏的 else 分支会起作用呢?
答案1
参见xstring
手册,3.4 Catcode and starred macros
。
如果您想在其中使用宏,则必须使用带星号的测试宏版本。
\renewcommand{\url}[1]{
\StrBehind{#1}{:}[\tempa]
\StrBefore{#1}{:}[\tempb]
\IfBeginWith*{\tempb}{mailto}
{\href{#1}{\nolinkurl{\tempa}}}
{\oldUrl{#1}}
}