
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]}}
}
私の最初の結論: 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}}
}