17

How can I change the color of glossary links when using glossaries along with hyperref? I just want to change glossary link colors not all links.

  • Do you use the option colorlinks=true. If yes the color can be set via linkcolor=blue. – Marco Daniel Dec 16 '11 at 22:21
  • 1
    Yes, but it changes color of all links like table of contents and references (/ref). I just want to change the color of glossary references(/gls). – Mohammad Hedayati Dec 16 '11 at 22:24
24

Normally the link color is set via the option linkcolor of the package hyperref. To influence only the link color of glossaries you must redefine the command \glstextformat. In the documentation you can find:

The way the link text is displayed depends on

\glstextformat{⟨text⟩}

For example, to make all link text appear in a sans-serif font, do:

\renewcommand*{\glstextformat}[1]{\textsf{#1}}

In relation to this comment here an example:

\documentclass[10pt,a4paper]{report}
\usepackage{xcolor}
\usepackage[colorlinks=true]{hyperref}
\usepackage[xindy]{glossaries}
\renewcommand*{\glstextformat}[1]{\textcolor{green}{#1}}

\makeglossaries
\newglossaryentry{A}{name={A}, description={A is A}}
\newglossaryentry{AA}{name={AA}, description={AA is AA}}
\newglossaryentry{B}{name={B}, description={B is B}}
\newglossaryentry{C}{name={C}, description={C is C}}
\newglossaryentry{CC}{name={CC}, description={CC is CC}}

\begin{document}
Here I cite either \gls{A}, \gls{AA}, \gls{B}, \gls{C} or \gls{CC}.
I want three groups in the glossary output, indicated by \textbf{A},
\textbf{B} and \textbf{C} with entries in them according to their initial letter.

\printglossary[style=indexgroup]
\end{document}
4

I had a similar request, with the only difference that I didn't want to have any colored glossary links at all. Marco's solution wasn't satisfying for me as it changes all links to a specific color. Instead I wanted to keep the corresponding current text color.


Another approach might be setting the hyperlink color to the current text color (.) before the hyperlink is created and resetting it to the globally used link color (\@linkcolor) afterwards in a new command:

\newcommand*{\glsplainhyperlink}[2]{%
  \colorlet{currenttext}{.}% store current text color
  \colorlet{currentlink}{\@linkcolor}% store current link color
  \hypersetup{linkcolor=currenttext}% set link color
  \hyperlink{#1}{#2}%
  \hypersetup{linkcolor=currentlink}% reset to default
}

Then, override the existing \@glslink to use our command:

\let\@glslink\glsplainhyperlink

Complete example with a black link on white background and a white link on a black background:

\documentclass{report}
\usepackage{xcolor}
\usepackage[colorlinks,linkcolor=green]{hyperref}
\usepackage{glossaries}

\makeatletter
\newcommand*{\glsplainhyperlink}[2]{%
  \colorlet{currenttext}{.}% store current text color
  \colorlet{currentlink}{\@linkcolor}% store current link color
  \hypersetup{linkcolor=currenttext}% set link color
  \hyperlink{#1}{#2}%
  \hypersetup{linkcolor=currentlink}% reset to default
}
\let\@glslink\glsplainhyperlink
\makeatother

\makenoidxglossaries
\newglossaryentry{GPU}{name={GPU}, description={Graphics Processing Unit}}

\begin{document}

  I need a faster \gls{GPU}.

  \colorbox{black}{\color{white}I need a faster \gls{GPU}.}

  \printnoidxglossary

\end{document}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.