% This file is public domain.
%
% This is a sample document illustrating how to use the
% glossaries package with xindy. To create the document:
%
%   latex samplexdy
%   makeglossaries samplexdy
%   latex samplexdy
%
% If you don't have Perl installed, then use one of the
% following instead of makeglossaries:
%
% If you want to have a separate "Mc" letter group do:
%
%    xindy -I xindy -M samplexdy-mc -t samplexdy.glg -o samplexdy.gls samplexdy.glo
%
% Otherwise do:
%
%  xindy -L english -C utf8 -I xindy -M samplexdy -t samplexdy.glg -o samplexdy.gls samplexdy.glo
% 
% If you want to use arara, you need the following directives:
% arara: pdflatex: { synctex: on }
% arara: makeglossaries
% arara: pdflatex: { synctex: on }
%
%http://mirrors.ctan.org/macros/latex/contrib/glossaries/glossaries-user.html#sample
\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[notext,notextcomp]{stix}

\usepackage[colorlinks,plainpages]{hyperref}
\usepackage[xindy,style=altlistgroup]{glossaries}

% Define a new command to do bold italic:

\newcommand*{\hyperbfit}[1]{\textit{\hyperbf{#1}}}

% Need to add this to the list of attributes in order
% to use it with xindy:
% (This command will have no effect if \noist is used)

\GlsAddXdyAttribute{hyperbfit}

% Redefine the page numbers to a custom format (requires stix
% package for the dice commands):

% \tallynum{n} displays a die or dice where the dots add up to n
\newrobustcmd*{\tallynum}[1]{%
 \ifnum\number#1<7
  $\csname dice\romannumeral#1\endcsname$%
 \else
  $\dicevi$%
  \expandafter\tallynum\expandafter{\numexpr#1-6}%
 \fi
}

% \tally{counter} expands to \tallynum{n} where n is the counter
% value. In order to work with glossaries and xindy this requires
% a very specific format. (See the glossaries user manual for more
% details.)

\newcommand*{\tally}[1]{\tallynum{\arabic{#1}}}

% Now redefine \thepage
% (\texorpdfstring is used in case the page number ends up in a PDF
% bookmark, although this is unlikely)
\renewcommand*{\thepage}{\texorpdfstring{\tally{page}}{\arabic{page}}}

% Need to add this to the list of location styles.
% This requires knowing how \thepage expands when written to a file.
% You can check by inspecting the ':locref' attributes in the .glo
% file. In this case, \thepage expands to \tallynum {n}
% (the space is significant) where n is an arabic number.
% (This command will have no effect if \noist is used)

\GlsAddXdyLocation{tally}{% tally location format
 :sep "\string\tallynum\space\glsopenbrace" % -> \tallynum { 
 "arabic-numbers" % -> arabic number (0, 1, 2, etc)
 :sep "\glsclosebrace" % -> }
}

% If the definition of \tally changes so that it expands to
% something slightly different then the above will have to be
% changed accordingly.

% (Need to redefine \glsXpageXhyperbfit and
% \glsXpageXglsnumberformat after \makeglossaries to get the
% hyperlinks working correctly.)

% To have Mc as a separate group uncomment the following three
% lines:

%\setStyleFile{samplexdy-mc} % note no extension
%\noist
%\GlsSetXdyLanguage{}

% The above three lines specify to use samplexdy-mc.xdy (supplied
% with this file) and don't overwrite it. The language is
% unset using \GlsSetXdyLanguage{} as all the language 
% dependent information is contained in samplexdy-mc.xdy
% Note that using \noist means that commands like
% \GlsAddXdyAttribute and \GlsAddXdyLocation will no longer have
% an effect.

% Write the style file (if \noist isn't used)
% and activate glossary entries

\makeglossaries

% Each page location will be specified in the form:
%
% "\glsXpageXglsnumberformat{}{\tallynum {" number "}}"
% or
% "\glsXpageXhyperbfit{}{\tallynum {" number "}}"
%
% Knowing this, we can redefine \glsXpageXglsnumberformat
% and \glsXpageXhyperbfit to grab the number part to work out the
% location's numeric value. If the definition of \tally changes
% so that it expands to something slightly different then this
% code will no longer work.
%
% Redefine to allow hyperlinks:

\renewcommand{\glsXpageXglsnumberformat}[2]{%
 % remember that #2 is in the form \tallynum {n}
 % so this does \linkpagenumber\tallynum{n}
 \linkpagenumber#2%
}

\renewcommand{\glsXpageXhyperbfit}[2]{%
 \textbf{\em\linkpagenumber#2}%
}

% Syntax: \linkpagenumber\tallynum{page number}
% This creates hyperlink to the given page.
\newcommand{\linkpagenumber}[2]{\hyperlink{page.#2}{#1{#2}}}

% Define glossary entries
% \glshyperlink is used instead of \gls to prevent the glossary
% page numbers also appear in the locations, however I need
% to ensure that the referenced entries are added to the 
% glossary via commands that use \glslink, \glsadd or \glssee

\newglossaryentry{mcadam}{name={McAdam, John Loudon},
first={John Loudon McAdam},text={McAdam},
description={Scottish engineer}}

\newglossaryentry{maclaurin}{name={Maclaurin, Colin},
first={Colin Maclaurin},text={Maclaurin},
description={Scottish mathematician best known for the
\gls{maclaurinseries}}}

\newglossaryentry{maclaurinseries}{name={Maclaurin series},
description={Series expansion},see={taylorstheorem}}

\newglossaryentry{taylorstheorem}{name={Taylor's theorem},
description={Theorem expressing a function $f(x)$ as the sum of
a polynomial and a remainder:
\[f(x) = f(a)+f'(a)(x-a)+f''(a)(x-a^2)/2!+\cdots+R_n\]
If $n\to\infty$ the expansion is a \glshyperlink{taylorseries}
and if $a=0$, the series is called a 
\gls{maclaurinseries}}}

\newglossaryentry{taylorseries}{name={Taylor series},
description={Series expansion},see={taylorstheorem}}

\newglossaryentry{taylor}{name={Taylor, Brook},
first={Brook Taylor},text={Taylor},
description={English mathematician}}

\newglossaryentry{mcnemar}{name={McNemar, Quinn},
first={Quinn McNemar},text={McNemar},
description={Mathematician who introduced 
\gls{mcnemarstest}. This entry has the number list
suppressed},nonumberlist}

\newglossaryentry{mcnemarstest}{name={McNemar's test},
description={A nonparametric test introduced by
\gls{mcnemar} in 1947}}

\newglossaryentry{mach}{name={Mach, Ernst},
first={Ernst Mach},text={Mach},
% if using samplexdy-mc.xdy, the following line is needed
% to prevent this entry being put in the "Mc" group
sort={mach, Ernst},
description={Czech/Austrian physicist and philosopher}}

\newglossaryentry{machnumber}{name={Mach number},
% if using samplexdy-mc.xdy, the following line is needed
% to prevent this entry being put in the "Mc" group
sort={mach number},
description={Ratio of the speed of a body in a fluid to the
speed of sound in that fluid named after \gls{mach}}}

\newglossaryentry{malthus}{name={Malthus, Thomas Robert},
first={Thomas Robert Malthus},text={Malthus},
description={English mathematician, sociologist and classicist}}

\newglossaryentry{ampereandre}{name={Ampère, André-Marie},
first={André-Marie Ampère},text={Ampère},
description={French mathematician and physicist}}

\newglossaryentry{ampere}{name={ampere},
description={SI unit of electric current named after
\gls{ampereandre}}}

\newglossaryentry{archimedes}{name={Archimedes of Syracuse},
first={Archimedes of Syracuse},text={Archimedes},
description={Greek mathematician}}

\newglossaryentry{archimedesprinciple}{name={Archimedes' principle},
description={Principle that if a body is submerged in a fluid
it experiences upthrust equal to the weight of the displaced
fluid. Named after \gls{archimedes}}}

\newglossaryentry{galton}{name={Galton, Sir Francis},
first={Sir Francis Galton},text={Galton},
description={English anthropologist}}

\newglossaryentry{gauss}{name={Gauss, Karl Friedrich},
first={Karl Friedrich Gauss},text={Gauss},
description={German mathematician}}

\newglossaryentry{gaussianint}{name={Gaussian integer},
description={Complex number where both real and imaginary
parts are integers}}

\newglossaryentry{gaussianfn}{name={Gaussian function},
 description={A function of the form:
 \[f(x) = a \exp\left(-\frac{(x-b)^2}{2c^2}\right)\]
 for some constants $a$, $b$ and $c$}}

\newglossaryentry{peano}{name={Peano, Giuseppe},
first={Giuseppe Peano},text={Peano},
description={Italian mathematician}}

\newglossaryentry{peanoscurve}{name={Peano's curve},
description={A space-filling curve discovered by 
\gls{peano}}}

\newglossaryentry{pearson}{name={Pearson, Karl},
first={Karl Pearson},text={Pearson},
description={English mathematician}}

\newglossaryentry{pearspmcc}{name={Pearson's product moment
correlation coefficient},description={Product moment correlation
coefficient named after \gls{pearson}}}

\begin{document}
\title{Sample Document Using the Glossaries Package With Xindy}
\author{Nicola Talbot}
\maketitle

\section{\glsentryfirst{gauss}}

This is a section on \gls[format=(]{gauss}. This section spans
several pages.

\rule{1pt}{0.6\textheight}

This paragraph has been shoved to the bottom of the page using a rule. 
This paragraph spans a page break for testing purposes to ensure the
glossary entry in this paragraph has the correct location. Here's
the glossary entry: \gls{gaussianfn}. Check that the location is
correct.

This page talks about \glspl[format=hyperbfit]{gaussianint}. Since
it's the principle definition, the user-defined hyperbfit format is 
used.

\newpage

The section on \gls[format=)]{gauss} ends here.

\section{Series Expansions}

This section is about series expansions. It mentions
\gls{maclaurin} and \gls{taylor}. It also discusses 
\gls{taylorstheorem} which is related to the \gls{taylorseries}.
The \gls{maclaurinseries} is a special case of the
\gls{taylorseries}.

\section{\glsentryname{archimedesprinciple}}

This section discusses \gls{archimedesprinciple} which was
introduced by \gls{archimedes}.

\section{Another section}

This section covers \gls{mach} who introduced the \gls{machnumber}.
It also mentions \gls{ampereandre} after whom the
SI unit \gls{ampere} is named. It then discusses \gls{galton}
and \gls{malthus}. Finally it mentions \gls{mcadam}.

\newpage
This page discusses \gls{mcnemar} who introduced
\gls{mcnemarstest} and \gls{peano} who discovered \gls{peanoscurve}.

\printglossaries
\end{document}
