我已经改进了 \citep,以便超链接的颜色变成“青色”:
\let\oldcitep=\citep
\def\citep#1{\hypersetup{citecolor=Teal}\oldcitep{#1}} %changes colour of citep link to Teal.
注意:我这样做是因为我想让 \citep 与 \citet 颜色不同。
总体而言,该系统运行良好:
\citep{Author2000}
变成:
(作者,2000 年)
正如预期的那样,颜色变成了青色。
但是如果我尝试使用前缀,它不起作用:
\citep[see:][]{Author2000}
变成
(?)参见:][]作者2000
所有文字保持黑色。
为什么会发生这种情况?有人能帮我解决这个问题吗?
干杯。
答案1
如果您想简化重新定义语法,也可以使用xpatch
包,它负责处理较低级别的实现细节。包定义了(除其他外)一个命令\xpretocmd
,它有四个参数:您要更改的命令(此处:)\citep
、您要放在前面的代码(此处:)\hypersetup{citecolor=Teal}
、重新定义成功时需要执行的代码(此处:无)以及重新定义失败时需要执行的代码(此处:同样无)。
请注意,与其他答案不同,颜色变化是全局的,因此它也会影响\citet
。 解决此问题的一个简单方法是重新定义\citet
。
梅威瑟:
\documentclass{article}
\usepackage{natbib}
\usepackage[svgnames]{xcolor}
\usepackage[colorlinks]{hyperref}
\usepackage{xpatch}
\xpretocmd{\citep}{\hypersetup{citecolor=Teal}}{}{}
\xpretocmd{\citet}{\hypersetup{citecolor=Magenta}}{}{}
\begin{document}
Some text \citet{regular} and in parentheses \citep{regular}
and with prefix, \citep[see:][]{regular}
\bibliographystyle{apalike}
\bibliography{sample}
\end{document}
答案2
您可以使用#{
参数抓取所有内容,直到第一个{
,然后将其传递给\oldcitep
。您还需要一组额外的括号来仅包含对该引用的颜色更改:
\let\oldcitep=\citep
\def\citep#1#{\INNERcitep{#1}}
\def\INNERcitep#1#2{{\hypersetup{citecolor=Teal}\oldcitep#1{#2}}}
梅威瑟:
\documentclass{article}
\usepackage{natbib}
\usepackage[svgnames]{xcolor}
\usepackage[colorlinks]{hyperref}
\let\oldcitep=\citep
\def\citep#1#{\INNERcitep{#1}}
\def\INNERcitep#1#2{{\hypersetup{citecolor=Teal}\oldcitep#1{#2}}}
\begin{document}
\citet{article-full}
\citep{article-full}
\citep[][]{article-full}
\citep[see:][]{article-full}
\citet{article-full}
\bibliographystyle{apalike}
\bibliography{xampl}
\end{document}