fontspec \setmainfont 覆盖 href 颜色

fontspec \setmainfont 覆盖 href 颜色

我对 fontspec 的工作方式很满意,但有一个问题。我有一个命令: \setmainfont[Color=393939]{URW Palladio L} 它为文档中的所有文本着色。我的标题是深灰色。

问题是我希望所有超链接都自动用我选择的颜色着色。我使用 \usepackage{hyperref} \hypersetup{...urlcolor=orange}

如果我这样做,像这样的着色超链接效果很好不是\setmainfont[Color=393939]{URW Palladio L}命令,但是包含该命令时不起作用。

有什么方法可以给所有正文添加颜色并自动给超链接添加颜色吗?

成套工具

答案1

再次基于艾伦的回答,这似乎有效(甚至更好),只要颜色事先已定义或已预定义:

\documentclass{article}
\usepackage{fontspec}
\usepackage{xcolor}

\definecolor{mycolor}{rgb}{1,0.3,0.5}

\setmainfont[Color=FF0000]{Linux Libertine O}
\setsansfont[Color=00FF00]{Linux Biolinum O}
\usepackage{hyperref}
\hypersetup{colorlinks=true,urlcolor=mycolor,filecolor=orange}
\makeatletter
\def\HyColor@@@@UseColor#1\@nil{\addfontfeatures{Color=#1}}
\makeatother

\begin{document}

A hyperlink:
\href{http://tex.stackexchange.com}{TeX StackExchange}

\sffamily A hyperlink:
\href{abc}{TeX StackExchange}
\end{document}

您会注意到第二个超链接的颜色不同,因为它不是 URL 而且filecolor已被使用。

答案2

根据 Seamus 在评论中的建议(并经过编辑以包含 egreg 的建议)得出的答案,以下似乎是一个解决方案:

我重新定义了命令的相关部分\href,以在链接中添加橙色。我保留了命令urlcolor中的\hypersetup以获取纯色链接的颜色\url

\documentclass{article}
\usepackage{fontspec}
\usepackage{xcolor}
\setmainfont[Color=393939]{Linux Libertine O}
\usepackage{hyperref}
\hypersetup{colorlinks=true,urlcolor=orange}
\makeatletter
\def\Hy@href#{%
  \addfontfeatures{Color=orange}\hyper@normalise\href@
}
\makeatother
\begin{document}
A hyperlink:
\href{http://tex.stackexchange.com}{TeX StackExchange}
\end{document}

代码输出

相关内容