
Quiero cortar las etiquetas URL definidas en un archivo Bibtex. Por ejemplo, quiero recortar el prefijo "mailto:" para que no se muestre. Pero el hipervínculo todavía tiene que contenerlo. El siguiente comando funciona en el entorno de documentos pero falla en las entradas de bibliografía. ¿Necesitan un cuidado especial?
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}
Archivo Bibtex:
@MANUAL{ABC,
title = {Test Title},
author = {ABC},
url = {mailto:[email protected]}
}
Producción:
Funciona para la etiqueta de nota pero no para la etiqueta de URL, porque en la etiqueta de nota se usa la macro de URL (descubierta usando el motor bibtex en lugar del motor biber, porque bibtex no proporciona una etiqueta de URL):
@MANUAL{ABC,
title = {Test Title},
author = {ABC},
url = {mailto:[email protected]}
note = {\url{mailto:[email protected]}}
}
Mi primera conclusión: biber no usa la macro de URL para crear hiperreferencias, pero entonces ¿por qué funciona la rama else de la macro \IfBeginWith en la redefinición de la macro de URL?
Respuesta1
Ver xstring
manual, 3.4 Catcode and starred macros
.
Debe utilizar la versión destacada de la macro de prueba si desea utilizar macros allí.
\renewcommand{\url}[1]{
\StrBehind{#1}{:}[\tempa]
\StrBefore{#1}{:}[\tempb]
\IfBeginWith*{\tempb}{mailto}
{\href{#1}{\nolinkurl{\tempa}}}
{\oldUrl{#1}}
}