\citefield 參考書目連結(hyperref 和 backref)

\citefield 參考書目連結(hyperref 和 backref)

我想知道是否有辦法在 \citefield 命令上獲取連結和反向引用連結。例如,我只想引用參考文獻的標題:

\citefield{ref}{title} 

或任何其他字段,並獲取引用的超連結和相應的反向引用連結。

編輯:

微量元素

\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使用xpatch-package 修補 -command。因此,您只需找到它將被它呼叫的底層巨集:\blx@cite@citefield

您將無法\citefield{author}按照您想要的方式使用,因為它在內部不作為 a 處理,field而是作為 a 處理,所以如果您想使用,name您還必須修補。您可能還需要修補此行中的第三個命令。看。\citename\citename{key}{author}\citelistbiblatex-manual, 3.7.7 Low-level Commands

我的範例包含所有三個補丁,但\citename\citelist在註釋中且未經測試。 (以這種方式使用它們對我來說沒有多大意義。)

如果你真的想要一個像 那樣的命令\citeany{key}{field/name/list},我想,你必須實現一個帶有內部開關的新宏,該開關根據給定的導致宏\citefield, 。但這相當困難,因為您必須處理 cite 命令中的 5 個可選參數。我不知道該怎麼做。\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...

微量元素:

\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}

相關內容