\citefield 参考文献へのリンク (ハイパー参照とバック参照)

\citefield 参考文献へのリンク (ハイパー参照とバック参照)

\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-package を使用して -commandにパッチを適用することもできますxpatch。したがって、それによって呼び出される基礎となるマクロを見つけるだけです。\blx@cite@citefield

は内部的にではなく\citefield{author}として処理されるため、 を希望どおりに使用することはできません。そのため、を使用する場合は にパッチを適用する必要もあります。この行の 3 番目のコマンドは であり、これにもパッチを適用する必要がある場合があります。 を参照してください。fieldname\citename\citename{key}{author}\citelistbiblatex-manual, 3.7.7 Low-level Commands

私の例には 3 つすべてのパッチが含まれていますが、コメント\citenameのみ\citelistでテストされていません。(このように使用してもあまり意味がないと思います。)

本当に のようなコマンドを 1 つだけ使いたいのであれば、指定された に応じて\citeany{key}{field/name/list}マクロ\citefield\citekeyにつながる内部スイッチを持つ新しいマクロを実装する必要があると思います。しかし、これはむしろ難しく、cite-commands からの 5 つのオプション パラメータを処理する必要があります。その方法がわかりません。\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}

関連情報