Как изменить URL-теги Bibtex в Latex?

Как изменить URL-теги Bibtex в Latex?

Я хочу вырезать теги URL, определенные в файле Bibtex. Например, я хочу вырезать префикс "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]}
}

Выход:

МВЭ

Это работает для тега заметки, но не для тега URL, поскольку в теге заметки используется макрос URL (обнаруженный с помощью движка bibtex вместо движка biber, поскольку bibtex не предоставляет тег URL):

@MANUAL{ABC,
    title = {Test Title},
    author = {ABC},
    url = {mailto:[email protected]}
    note = {\url{mailto:[email protected]}}
}

МВЭ2

Мой первый вывод: biber не использует макрос url для создания гиперссылок, но тогда почему работает ветвь else макроса \IfBeginWith в переопределении макроса url?

решение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}}
}

Связанный контент