¿Cómo modificar etiquetas URL de Bibtex en Latex?

¿Cómo modificar etiquetas URL de Bibtex en Latex?

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:

MWE

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]}}
}

MWE2

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 xstringmanual, 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}}
}

información relacionada