使用 \url 启用参考书目的双向方式:bibtex 和 biblatex (biber)

使用 \url 启用参考书目的双向方式:bibtex 和 biblatex (biber)

我正在尝试制作一份文档来接受bibtexbiblatex(当然是在不同的编译过程中),但我遇到了一个问题,因为:

  1. bibtex必须\url在每个 URL 中添加命令(真的有很多条目)
  2. 但是 biblatex 不接受这个(已经存在,所以它假设它是我的 url 的一部分)并给出不想要的结果。

以下是代码:

\documentclass{article}
\usepackage{filecontents}
% \UseBibLaTex is a variable that if is less than 1 the document 
% will have to compiled with `bibTeX`... else with biber
\def\UseBibLaTeX{0}
% ``url'' package is used in order to make LaTeX to break the urls 
% in places like the bibliography combined with the next (upcoming) 
% command
%\usepackage{breakurl}
\usepackage[hyphens]{url}
\Urlmuskip=0mu plus 1mu

\ifnum\UseBibLaTeX>0
\usepackage[backend=biber,style=authoryear]{biblatex}
\newcommand\myurl[1]{#1}
\DeclareFieldFormat{url}{{\footnotesize URL:}\space%\expandafter%\noexpand
\myurl{#1}}
\addbibresource{myBib.bib}
\else
% ``natbib'' package offers the bigger ammount possibilities in bibliography
% formating
\let\myurl\url
\usepackage{natbib}
\fi


\begin{filecontents*}{myBib.bib}
@Article{cite1,
title={One Article with a url that has to break both in bibtex and biblatex},
author={Someone NotMe and Someother Me},
year={2018},
month={10},
url={\url{http://A-long-URL-that-has-to-break-through-lines-and-biber-has-to-ignore-the-\textbackslash url-command}},
doi={http://dx.doi.org/10.1038/nphys1170}
}
\end{filecontents*}

\title{Double Functionality about Bibliography}
\author{Konstantinos Leledakis}
\date{October 2018}

\begin{document}

\maketitle

\nocite{*}
\ifnum\UseBibLaTeX>0
\printbibliography
\else
\bibliographystyle{agsm}
\begin{sloppypar}
  \bibliography{myBib}
\end{sloppypar}
\fi



\end{document}

上述代码的输出与预期一致...但是如果我将命令更改\def\UseBibLaTeX{0}为,\def\UseBibLaTeX{1}我会得到(作为 biber 的新手所期望的,但是...)不想要的结果:

在此处输入图片描述

已经尝试了一些类似的东西\noexpand或者\expandafter在我的代码中注释掉的东西但无法让它按照我想要的方式工作。

答案1

biblatex期望url字段仅包含 URL。没有其他标记,例如\url{...},没有特殊字符的转义,什么都没有,只有详细的 URL。

您看到的问题是 Biber 对 URL 应用了百分比编码,这会弄乱您的\url{...}包装器。(有多种方法可以摆脱百分比编码,请参阅biblatex,在 url 中使用空格不起作用如何禁用 URL 中的百分比编码?Biblatex URL 中的斯堪的纳维亚字母,但这在这里没有什么帮助。)

幸运的是,大多数.bst支持专用 URL 字段的文件也以不需要您添加\url{...}或附加命令的方式处理 URL;就像biblatex它们期望原始 URL 一样。

BibTeX 对 URL 的具体处理取决于.bst您使用的样式。 agsm使用您可以重新定义的命令。不幸的是,对于如何处理 URL,\harvardurl大家并没有达成普遍共识。许多文件只是直接使用(特别是标准样式和),少数文件有专用命令。.bst.bst\url{...}natbiburlbstagsm

编辑:我最初将 MWE 中的 理解\myurl为尝试统一更改biblatex和 BibTeX 样式的 URL 格式(可能独立于\url文档中显示的其他 )。如果这确实是 的目的\myurl,您需要知道.bst文件如何处理 URL 并相应地重新定义所涉及的命令。以与样式无关的方式实现这一点几乎是不可能的。另一方面,如果您只打算修复biblatexMWE 中 URL 的不良输出,并且您通常希望 URL“正常”显示,那么根本不需要\myurl,您可能只需按原样使用样式即可。请参阅编辑历史记录以了解答案的第一个版本。

无论如何,对natbib的定义可能应该稍微调整一下,以允许所有类型的 URL。agsm\harvardurl

\documentclass{article}
\def\UseBibLaTeX{0}
\usepackage[hyphens]{url}


\ifnum\UseBibLaTeX>0
\usepackage[backend=biber,style=authoryear]{biblatex}
  \addbibresource{\jobname.bib}
\else
  \usepackage{natbib}
  \renewcommand\harvardurl{\textbf{URL:} \url}
\fi

\begin{filecontents*}{\jobname.bib}
@misc{cite1,
  title  = {One Article with a url that has to break both in bibtex and biblatex},
  author = {Someone NotMe and Someother Me},
  year   = {2018},
  url    = {http://A-long-URL-that-has-to-break-through-lines-and-biber-has-to-ignore-the-\textbackslash url-command},
}
\end{filecontents*}

\begin{document}
\nocite{*}
\ifnum\UseBibLaTeX>0
  \printbibliography
\else
  \bibliographystyle{agsm}
  \bibliography{\jobname}
\fi
\end{document}

相关内容