如何在 Latex 中修改 Bibtex URL 标签?

如何在 Latex 中修改 Bibtex URL 标签?

我想剪切 Bibtex 文件中定义的 URL 标签。例如,我想裁剪前缀“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]}
}

输出:

平均能量损失

它对 note 标签有效,但对 url 标签无效,因为 note 标签中使用了 url 宏(使用 bibtex 引擎而不是 biber 引擎发现,因为 bibtex 不提供 url 标签):

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

相关内容