\citefield 참고문헌 링크(하이퍼참조 및 역참조)

\citefield 참고문헌 링크(하이퍼참조 및 역참조)

\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}\citelistbiblatex-manual, 3.7.7 Low-level Commands

내 예에는 세 가지 모두에 대한 패치가 포함되어 있지만 주석 및 테스트되지 않은 패치만 \citename포함 되어 있습니다. \citelist(이렇게 사용하는 것은 별 의미가 없습니다.)

와 같은 하나의 명령을 정말로 갖고 싶다면 주어진 에 따라 매크로 , 로 \citeany{key}{field/name/list}연결되는 내부 스위치가 있는 새 매크로를 구현해야 했던 것 같습니다 . 그러나 cite-commands의 5가지 선택적 매개변수를 처리해야 하기 때문에 이는 다소 어렵습니다. 이 작업을 수행하는 방법을 모르겠습니다.\citefield\citekey\citelistfield/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}

관련 정보