我在用biblatex
:
\usepackage[style=authoryear,
natbib=true,
hyperref=true,
url=false,
doi=false,
isbn=false,
sorting=nyt,
bibstyle=numeric,
backend=bibtex]{biblatex}
\usepackage{hyperref}
以及 hyperref 解决方法:
\DeclareCiteCommand{\cite}
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand*{\cite}
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{citeyear}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\parencite}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand*{\parencite}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{citeyear}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\footcite}[\mkbibfootnote]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{ \usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\textcite}
{\boolfalse{cbx:parens}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{textcite}}}
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}%
\multicitedelim}
{\usebibmacro{textcite:postnote}}
超链接的颜色是绿色。如果我使用\citet
,我会得到这个结果,其中结束括号不是绿色。
因为\citep
同样的事情发生了:
和\cite
:
我怎样才能改变支架的颜色以使其保持一致?
答案1
完整链接 是 难的带有biblatex
。此外,某些样式的链接可能会引起混淆。这就是为什么默认仅链接年份/标题的原因。尽管如此,完整链接似乎在许多人的愿望清单中名列前茅。
幸运的是,这种风格authoryear
在概念上没有多少问题。但我们仍然必须重新实现所有引用命令。
通常,当处理的条目尚不清楚或不再清楚,或者分组使事情变得有点尴尬时,会排版引文的部分内容,括号以及后注和前注都是如此。我们必须将这些元素的排版置于一个上下文中,在这个上下文中,我们知道它们“属于”哪个条目,并且可以轻松应用链接。
对于其他更复杂的样式,例如在条目之间使用标点符号跟踪器,这将变得更加困难authoryear-icomp
。标点符号跟踪器使文本和标点符号的排版变得异步,从而导致出现极端情况,在这种情况下,让链接围绕标点符号变得非常复杂。
请注意,代码使用的内部宏,hyperref
只有在加载该包时才可用。没有进行错误检查,以防止因未加载而导致错误hyperref
。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage[colorlinks]{hyperref}
\makeatletter
\newcommand*{\linkblx@startlink}[1]{%
\blx@sfsave\hyper@natlinkstart{\the\c@refsection @#1}\blx@sfrest}
\newcommand*{\linkblx@startlinkentry}{%
\linkblx@startlink{\abx@field@entrykey}}
\newcommand*{\linkblx@endlink}{%
\blx@sfsave\hyper@natlinkend\blx@sfrest}
\DeclareCiteCommand{\cite}
{}%
{\DeclareFieldFormat{bibhyperref}{####1}%
\linkblx@startlinkentry
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{citeindex}%
\usebibmacro{cite}%
\ifnumequal{\value{citecount}}{\value{citetotal}}
{\usebibmacro{postnote}}
{}%
\iflastcitekey{}{\multicitedelim}%
\linkblx@endlink}
{}
{}
\DeclareCiteCommand*{\cite}
{}%
{\DeclareFieldFormat{bibhyperref}{####1}%
\linkblx@startlinkentry
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{citeindex}%
\usebibmacro{citeyear}%
\ifnumequal{\value{citecount}}{\value{citetotal}}
{\usebibmacro{postnote}}
{}%
\iflastcitekey{}{\multicitedelim}%
\linkblx@endlink}
{}
{}
\DeclareCiteCommand{\parencite}
{}%
{\DeclareFieldFormat{bibhyperref}{####1}%
\linkblx@startlinkentry
\iffirstcitekey{\bibopenparen}{}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{citeindex}%
\usebibmacro{cite}%
\ifnumequal{\value{citecount}}{\value{citetotal}}
{\usebibmacro{postnote}}
{}%
\iflastcitekey{\bibcloseparen}{\multicitedelim}%
\linkblx@endlink}
{}
{}
\DeclareCiteCommand*{\parencite}
{}%
{\DeclareFieldFormat{bibhyperref}{####1}%
\linkblx@startlinkentry
\iffirstcitekey{\bibopenparen}{}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{citeindex}%
\usebibmacro{citeyear}%
\ifnumequal{\value{citecount}}{\value{citetotal}}
{\usebibmacro{postnote}}
{}%
\iflastcitekey{\bibcloseparen}{\multicitedelim}%
\linkblx@endlink}
{}
{}
\DeclareCiteCommand{\textcite}
{\boolfalse{cbx:parens}}
{\DeclareFieldFormat{bibhyperref}{####1}%
\linkblx@startlinkentry
\usebibmacro{citeindex}%
\iffirstcitekey
{\setcounter{textcitetotal}{1}}
{\stepcounter{textcitetotal}%
\textcitedelim}%
\usebibmacro{textcite}%
\iflastcitekey
{}
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}}%
\ifnumequal{\value{citecount}}{\value{citetotal}}
{\usebibmacro{textcite:postnote}}
{}%
\linkblx@endlink}
{}
{}
\DeclareMultiCiteCommand{\parencites}{\parencite}{}
\makeatother
\begin{document}
A\cite{sigfridsson}B
\parencite{sigfridsson}
\textcite{sigfridsson}
\parencite[cf.][380]{sigfridsson}
\parencite{sigfridsson,worman,geer}
\parencite[cf.][1]{sigfridsson,worman,geer}
\printbibliography
\end{document}