我正在尝试制作一份文档来接受bibtex
和biblatex
(当然是在不同的编译过程中),但我遇到了一个问题,因为:
- 我
bibtex
必须\url
在每个 URL 中添加命令(真的有很多条目) - 但是 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{...}
natbib
urlbst
agsm
编辑:我最初将 MWE 中的 理解\myurl
为尝试统一更改biblatex
和 BibTeX 样式的 URL 格式(可能独立于\url
文档中显示的其他 )。如果这确实是 的目的\myurl
,您需要知道.bst
文件如何处理 URL 并相应地重新定义所涉及的命令。以与样式无关的方式实现这一点几乎是不可能的。另一方面,如果您只打算修复biblatex
MWE 中 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}