biblatex
DOI가 지정되지 않은 경우 인쇄 URL만 만드는 방법을 찾고 있습니다. 제 경우에는 DOI가 어쨌든 심판의 링크로 연결되어 URL이 중복되게 됩니다.
나는 이것을 생각해 냈습니다. (그러나 컴파일이 끝나지 않아 무한 루프를 일으키는 것 같습니다...):
\renewbibmacro*{url+urldate}{%
\iffieldundef{doi}
{\usebibmacro{url+urldate}}
{}%
}
매크로 저장이 \let
작동하지 않는 것 같습니다 +
.
이 작업을 올바르게 수행하는 방법을 아시나요?
M(N)웹:
\documentclass{article}
\usepackage[style=authoryear-comp]{biblatex}
\usepackage{hyperref}
%\renewbibmacro*{url+urldate}{%
% \iffieldundef{doi}
% {\usebibmacro{url+urldate}}
% {}%
%
\addbibresource{\jobname.bib}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{key,
author = {Author, A.},
year = {2001},
title = {Title},
publisher = {Publisher},
archivePrefix = {arXiv},
arxivId = {1607.07249},
doi = {10.1007/978-3-319-49004-5_22},
eprint = {1607.07249},
url = {http://link.springer.com/10.1007/978-3-319-49004-5_22},
}
\end{filecontents}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
답변1
기능은 없지만 \letbibmacro
(기능 요청을 제출할 수도 있음) 만드는 것은 어렵지 않습니다.
\documentclass{article}
\usepackage[style=authoryear-comp]{biblatex}
\usepackage{hyperref}
\newcommand{\letbibmacro}[2]{%
\csletcs{abx@macro@#1}{abx@macro@#2}%
}
\letbibmacro{orig-url+urldate}{url+urldate}
\renewbibmacro*{url+urldate}{%
\iffieldundef{doi}
{\usebibmacro{orig-url+urldate}}
{}%
}
\addbibresource{\jobname.bib}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{key,
author = {Author, A.},
year = {2001},
title = {Title},
publisher = {Publisher},
archivePrefix = {arXiv},
arxivId = {1607.07249},
doi = {10.1007/978-3-319-49004-5_22},
eprint = {1607.07249},
url = {http://link.springer.com/10.1007/978-3-319-49004-5{\_}22},
}
@book{key2,
author = {Author, A.},
year = {2001},
title = {Title},
publisher = {Publisher},
archivePrefix = {arXiv},
arxivId = {1607.07249},
eprint = {1607.07249},
url = {http://link.springer.com/10.1007/978-3-319-49004-5{\_}22},
}
\end{filecontents}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
답변2
귀하가 요청한 질문에 대해 이미 훌륭한 답변을 얻으셨으므로 귀하가 해결하려는 문제에 대해 두 가지 솔루션을 추가해야겠다고 생각했습니다.
당신이 사용할 수있는
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=doi, final]
\step[fieldset=url, null]
\step[fieldset=urldate, null]
}
}
}
또는
\AtEveryBibitem{%
\iffieldundef{doi}
{}
{\clearfield{url}\clearfield{urlyear}}%
}
DOI가 있는 경우 URL을 인쇄하지 않습니다.
답변3
조건부로 URL을 인쇄하려면 다음으로 묶을 수 있습니다.\iffieldundef{doi}{}{}
\documentclass{article}
\usepackage[style=authoryear-comp]{biblatex}
\usepackage{hyperref}
% print url if no doi
\renewbibmacro*{doi+eprint+url}{%
\printfield{doi}
\newunit\newblock
\iftoggle{bbx:eprint}{
\usebibmacro{eprint}
}{}%
\newunit\newblock
\iffieldundef{doi}{
\usebibmacro{url+urldate}}
{}
}
\addbibresource{\jobname.bib}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{key,
author = {Author, A.},
year = {2001},
title = {Title},
publisher = {Publisher},
archivePrefix = {arXiv},
arxivId = {1607.07249},
doi = {10.1007/978-3-319-49004-5_22},
eprint = {1607.07249},
url = {http://link.springer.com/10.1007/978-3-319-49004-5{\_}22},
}
@book{keyx,
author = {Author, A.},
year = {2001},
title = {Title},
publisher = {Publisher},
archivePrefix = {arXiv},
arxivId = {1607.07249},
url = {http://link.springer.com/10.1007/978-3-319-49004-5{\_}22},
}
\end{filecontents*}
\begin{document}
\nocite{*}
\printbibliography
\end{document}