Como modificar tags de URL Bibtex em Latex?

Como modificar tags de URL Bibtex em Latex?

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:

MWE

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

MWE2

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

informação relacionada