.png)
\citefield 명령에서 링크와 역참조 링크를 얻을 수 있는 방법이 있는지 알고 싶습니다. 예를 들어, 참고문헌의 제목만 인용하고 싶습니다.
\citefield{ref}{title}
또는 다른 필드를 선택하고 참조에 대한 하이퍼링크와 해당 역참조 링크를 가져옵니다.
편집하다:
MWE
\documentclass{article}
\usepackage[backref=true]{biblatex}
\usepackage{hyperref}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@misc{B02,
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Some text \cite{A01,B02}.
\newpage
In this cite \citefield{A01}{title} I do not get any link
\clearpage
Some more text \cite{A01}.
\printbibliography
\end{document}
답변1
낮은 수준의 또 다른 접근 방식이므로 다른 답변으로 작성하겠습니다.
\citefield
-package를 사용하여 -command를 패치할 수도 있습니다 xpatch
. 따라서 호출될 기본 매크로를 찾았습니다.\blx@cite@citefield
\citefield{author}
내부적으로 로 처리되지 않고 로 처리되기 때문에 원하는 field
대로 사용할 수 없으므로 를 사용하려면 name
을 패치해야 했습니다 . 이 행의 세 번째 명령 도 패치해야 할 수 있습니다. 보다 .\citename
\citename{key}{author}
\citelist
biblatex-manual, 3.7.7 Low-level Commands
내 예에는 세 가지 모두에 대한 패치가 포함되어 있지만 주석 및 테스트되지 않은 패치만 \citename
포함 되어 있습니다. \citelist
(이렇게 사용하는 것은 별 의미가 없습니다.)
와 같은 하나의 명령을 정말로 갖고 싶다면 주어진 에 따라 매크로 , 로 \citeany{key}{field/name/list}
연결되는 내부 스위치가 있는 새 매크로를 구현해야 했던 것 같습니다 . 그러나 cite-commands의 5가지 선택적 매개변수를 처리해야 하기 때문에 이는 다소 어렵습니다. 이 작업을 수행하는 방법을 모르겠습니다.\citefield
\citekey
\citelist
field/name/list
\documentclass{article}
\usepackage[backref=true,backend=biber]{biblatex}
\usepackage{hyperref}
\usepackage{filecontents}
\usepackage{silence}\WarningFilter{latex}{Overwriting file}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
url = {http://www.something.com}
}
@misc{B02,
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\usepackage{xpatch}
\xpatchcmd{\blx@cite@citefield}{\printfield[#4]{#5}}{\printtext[bibhyperref]{\printfield[#4]{#5}}}{}{}%patch \citefield
% \xpatchcmd{\blx@cite@citename}{\printnames[#4]{#5}}{\printtext[bibhyperref]{\printnames[#4]{#5}}}{}{}%patch \citename
% \xpatchcmd{\blx@cite@citelist}{\printlist[#4]{#5}}{\printtext[bibhyperref]{\printlist[#4]{#5}}}{}{}%patch \citelist
\begin{document}
Citefield A01 title: \citefield{A01}{title}.
\clearpage
Citefield B02 title: \citefield{B02}{title}.
Citefield A01 url: \citefield{A01}{url}.
\printbibliography
\end{document}
답변2
에 대한 해결책을 모르겠습니다 \citefield
. 하지만 citecommand
원하는 특정 필드를 인쇄하는 새 항목을 선언할 수 있습니다 . 아래 예에서는 새 citecommand를 선언합니다 \citetitle*
(덮어쓰는 방법을 모르겠습니다 \citetitle
). 그런 다음 \printtext[bibhyperref]
출력 주위 를 감싸면됩니다.\printfield...
MWE:
\documentclass{article}
\usepackage[backref=true]{biblatex}
\usepackage{hyperref}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@misc{B02,
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareCiteCommand*{\citetitle}%your new citecommand \citetitle*
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{\indexfield{indextitle}}
{}%
\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}%like \citetile,
%only added \printtext[bibhyperref]{...} in this line
{\multicitedelim}
{\usebibmacro{postnote}}
\begin{document}
Some text \cite{A01,B02}.
\newpage
In this cite \citetitle*{A01} I do get a link now.
\clearpage
Some more text \cite{A01}.
\printbibliography
\end{document}