
Quero cortar as tags URL definidas em um arquivo Bibtex. Por exemplo, quero cortar o prefixo "mailto:" para que não seja mostrado. Mas o hiperlink ainda precisa contê-lo. O comando a seguir funciona no ambiente de documento, mas falha nas entradas bibliográficas. Eles precisam de cuidados especiais?
MWE:
\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}
Arquivo Bibtex:
@MANUAL{ABC,
title = {Test Title},
author = {ABC},
url = {mailto:[email protected]}
}
Saída:
Funciona para a tag note, mas não para a tag url, porque na tag note a macro url é usada (descoberta usando o mecanismo bibtex em vez do mecanismo biber, porque o bibtex não fornece uma tag url):
@MANUAL{ABC,
title = {Test Title},
author = {ABC},
url = {mailto:[email protected]}
note = {\url{mailto:[email protected]}}
}
Minha primeira conclusão: biber não usa a macro url para criar hiperrefs, mas então por que a ramificação else da macro \IfBeginWith na redefinição da macro url funciona?
Responder1
Consulte xstring
o manual, 3.4 Catcode and starred macros
.
Você deve usar a versão com estrela da macro de teste, se quiser usar macros nela.
\renewcommand{\url}[1]{
\StrBehind{#1}{:}[\tempa]
\StrBefore{#1}{:}[\tempb]
\IfBeginWith*{\tempb}{mailto}
{\href{#1}{\nolinkurl{\tempa}}}
{\oldUrl{#1}}
}