Latex で Bibtex URL タグを変更するにはどうすればいいですか?

Latex で Bibtex URL タグを変更するにはどうすればいいですか?

Bibtex ファイルで定義されている URL タグを切り取りたいです。たとえば、プレフィックス「mailto:」を切り取って表示されないようにしたいのですが、ハイパーリンクにはそれが含まれている必要があります。次のコマンドはドキュメント環境では機能しますが、参考文献エントリでは機能しません。特別な注意が必要ですか?

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}

Bibtex ファイル:

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

出力:

ムウェ

これは、ノート タグでは機能しますが、URL タグでは機能しません。ノート タグでは URL マクロが使用されるためです (bibtex は URL タグを提供しないため、biber エンジンではなく bibtex エンジンを使用することで検出されました)。

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

MWE2

私の最初の結論: biber はハイパー参照を作成するために URL マクロを使用しませんが、URL マクロの再定義で \IfBeginWith マクロの else ブランチが機能するのはなぜでしょうか?

答え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}}
}

関連情報