diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/glossary')
-rw-r--r-- | Master/texmf-dist/source/latex/glossary/glossary.dtx | 980 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/glossary/glossary.ins | 6 |
2 files changed, 754 insertions, 232 deletions
diff --git a/Master/texmf-dist/source/latex/glossary/glossary.dtx b/Master/texmf-dist/source/latex/glossary/glossary.dtx index bf00b2ba979..3c50320922c 100644 --- a/Master/texmf-dist/source/latex/glossary/glossary.dtx +++ b/Master/texmf-dist/source/latex/glossary/glossary.dtx @@ -1,20 +1,20 @@ %\iffalse -% glossary.dtx generated using makedtx version 0.9b (c) Nicola Talbot +% glossary.dtx generated using /nlctltpc/home/nlct/bin/makedtx version 0.9b (c) Nicola Talbot % Command line args: % -macrocode ".*\.p.*l" % -macrocode ".*\.bat" % -setambles ".*\.p.*l=>\nopreamble\nopostamble" % -setambles ".*\.bat=>\nopreamble\nopostamble" -% -src "(.+)\.(sty)=>\1.\2" -% -src "(.+)\.(pl)=>\1.\2" -% -src "(.+)\.(bat)=>\1.\2" -% -src "(.+)\.(perl)=>\1.\2" -% -src "(.+)\.(tex)=>\1.\2" +% -src "(.+)\.(sty)\Z=>\1.\2" +% -src "(.+)\.(pl)\Z=>\1.\2" +% -src "(.+)\.(bat)\Z=>\1.\2" +% -src "(.+)\.(perl)\Z=>\1.\2" +% -src "(.+)\.(tex)\Z=>\1.\2" % -doc "manual.tex" % -author "Nicola Talbot" % -dir "source" % glossary -% Created on 2005/9/27 12:20 +% Created on 2006/7/9 16:01 %\fi %\iffalse %<*package> @@ -37,7 +37,7 @@ %\fi % \iffalse % Doc-Source file to use with LaTeX2e -% Copyright (C) 2005 Nicola Talbot, all rights reserved. +% Copyright (C) 2006 Nicola Talbot, all rights reserved. % \fi % \iffalse %<*driver> @@ -48,7 +48,7 @@ hyperindex=false, pdfauthor={N.L.C. Talbot}, pdftitle={glossary.sty: LaTeX2e Package to Assist Generating Glossaries}, - pdfkeywords={LaTeX,package,glossary}]{hyperref} + pdfkeywords={LaTeX,package,glossary,acronym}]{hyperref} %hyperindex conflicts with doc %(end up with |usage|hyperpage in indexentry) @@ -94,9 +94,9 @@ %\MakeShortVerb{"} %\DeleteShortVerb{\|} % -% \title{glossary.sty v 2.24: \LaTeXe\ Package to Assist Generating Glossaries} +% \title{glossary.sty v 2.38: \LaTeXe\ Package to Assist Generating Glossaries} % \author{Nicola L.C. Talbot} -% \date{27th September 2005} +% \date{9th July 2006} % \maketitle %\tableofcontents % @@ -162,6 +162,10 @@ %command line switches, and you won't be able to merge entries %that have the same name, but different descriptions. % +%Note that if you are updating the glossary package, it is +%a good idea to update \texttt{makeglos.pl} as it may also +%have been modified. +% % \section{Generating Glossary Information} % % The standard \LaTeX\ command \cmdname{makeglossary}\DescribeMacro{\makeglossary}{} (analogous to \cmdname{makeindex}) @@ -347,6 +351,11 @@ %fragile, care should be taken when using commands within its %argument. If in doubt, use \cmdname{protect}. % +%As from version 2.36, if you want to use all glossary entries +%which have been defined using \cmdname{storeglosentry}, do: +%\verb|\useglosentry{*}|. (Note that this option is not +%available for \cmdname{useGlosentry} and \cmdname{gls}.) +% %\section{makeglos.pl} % %The glossary information (as given by the commands @@ -440,6 +449,7 @@ %options passed to the package. % %\section{Package Options} +%\label{sec:options} % %The package options must be specified as a comma-separated list %of \meta{key}=\meta{value} pairs. Available options are: @@ -558,6 +568,15 @@ %\item[\pkgoptval{false}{acronym}] The acronyms will all %be placed in the main glossary. (Default) %\end{description} +% +%\item[\pkgopt{global}] Boolean variable: +%\changes{2.31}{2005 December 5}{Package option \texttt{global}} +%\begin{description} +%\item[\pkgoptval{false}{global}] Acronym commands only have +%a local effect. (Default) +%\item[\pkgoptval{true}{global}] Acronym commands have a global +%effect. +%\end{description} %\end{description} % The \pkgopt{border}, \pkgopt{header} and \pkgopt{cols} options %should not be used in conjunction with \pkgopt[list]{style} @@ -691,7 +710,7 @@ %\label{sec:newglostype} % %A new type of glossary can be defined using the command:\DescribeMacro{\newglossarytype}\\[5pt] -%\cmdname{newglossarytype}\verb/[/\meta{log-ext}\verb"]{"\meta{name}\verb'}{'\meta{out-ext}\verb+}{+\meta{in-ext}\verb!}!\\[5pt] +%\cmdname{newglossarytype}\verb/[/\meta{log-ext}\verb"]{"\meta{name}\verb'}{'\meta{out-ext}\verb+}{+\meta{in-ext}\verb!}[!\meta{style list}\verb-]-\\[5pt] %For example, suppose you want your document to have a separate %index of terms and index of notation, %you could use \icmdname{makeglossary}, \icmdname{glossary}, @@ -706,6 +725,17 @@ %and \cmdname{printnotation} which can be used for the second %glossary. % +%\changes{2.3}{2005 Nov 18}{Added extra optional argument to'newglosarytype} +%As from version 2.3, \cmdname{newglossarytype} now has an +%additional optional argument \meta{style list}. This should +%be a comma separated list of \meta{key}=\meta{value} pairs +%that can be used to specify the style of the new glossary. +%If omitted, the new glossary will have the same format +%as the main glossary. The following options are available: +%\texttt{style}, \texttt{header}, \texttt{border} and +%\texttt{cols}. These can take the same values as those +%given in the package options (described in section~\ref{sec:options}). +% %The command \cmdname{newglossarytype} should only occur in the %preamble. The new commands % \cmdname{make}\meta{name}, \verb'\'\meta{name}, @@ -827,7 +857,7 @@ %new glossary type called \texttt{acronym} will be defined as: %\begin{verbatim} %\newglossarytype[alg]{acronym}{acr}{acn} -%\newcommand{\acronymname}{List of Acronyms} +%\providecommand{\acronymname}{List of Acronyms} %\end{verbatim} %You will then need to use the commands \icmdname{makeacronym} %and \icmdname{printacronym} to make the list of acronyms appear. @@ -842,7 +872,16 @@ %\end{verbatim} %Note that the package option \pkgopt[true]{acronym} is only %appropriate if you want both a glossary and a separate list of -%acronyms. +%acronyms. If you do not write in English, you can set up your +%own language definition +%for \cmdname{acronymname} in the configuration file +%\texttt{glossary}\filetype{cfg}. For example: +%\begin{verbatim} +%\newcommand{\acronymname}{Akronyme} +%\end{verbatim} +%(If \texttt{glossary.cfg} does not exist, create a new file, add the +%appropriate definition of \cmdname{acronymname}, and save it to the +%same directory as \texttt{glossary.sty}.) % %\changes{2.1}{2004 October 25}{name field can be omitted in %\texttt{'newacronym}} @@ -863,6 +902,43 @@ %\setacronymnamefmt{\gloshort} %\end{verbatim} % +%\changes{2.32}{2006 January 5}{added \texttt{'setacronymdescfmt}} +%As from version 2.32, you can also modify the way the description +%key is formatted for acronyms using\DescribeMacro{\setacronymdescfmt}:\\[10pt] +%\cmdname{setacronymdescfmt}\{\meta{format}\}\\[10pt] +%Within \meta{format} you may use the commands \icmdname{glolong} +%and \icmdname{gloshort} (as above), and you can also use +%the command \icmdname{glodesc} which is the description as +%specified by the \gloskey{description} key in +%\icmdname{newacronym}. This means that if you are using +%a tabular style glossary, you can have the abbreviated +%form in one column and the long form in the second column +%with the description. For example, the following: +%\begin{verbatim} +%\setacronymnamefmt{\gloshort} +%\setacronymdescfmt{\glolong: \glodesc} +%\newacronym{svm}{support vector machine}{description=Statistical +%pattern recognition technique} +%\end{verbatim} +%will generate a glossary entry of the form: +%\begin{verbatim} +%\glossary{name=svm,description=support vector machine: Statistical +%pattern recognition technique} +%\end{verbatim} +%Note that if you omit \icmdname{glodesc} from +%\cmdname{setacronymdescfmt} the description specified +%in \cmdname{newacronym} will be ignored. So +%\begin{verbatim} +%\setacronymnamefmt{\gloshort} +%\setacronymdescfmt{\glolong} +%\newacronym{svm}{support vector machine}{description=Statistical +%pattern recognition technique} +%\end{verbatim} +%will generate a glossary entry of the form: +%\begin{verbatim} +%\glossary{name=svm,description=support vector machine} +%\end{verbatim} +% %Given an acronym named \meta{acr-name} (the command name %associated with the acronym as defined in %\cmdname{newacronym} without the preceding backslash), @@ -871,6 +947,7 @@ %\vspace{10pt} %\changes{2.11}{2004 October 25}{\texttt{'useacronym}} %\changes{2.18}{2005 July 5}{Fixed bug in 'useacronym} +%\changes{2.26}{2005 November 17}{Fixed bug in 'useacronym} %\noindent %\cmdname{useacronym}\verb"["\meta{insert}\verb']{'\meta{acr-name}\verb!}!\DescribeMacro{\useacronym}\\[5pt] %This command can be used instead of \cmdname{}\meta{acr-name}. @@ -890,6 +967,16 @@ %\changes{2.21}{2005 July 27}{'resetallacronyms added} % %\vspace{10pt} +%\changes{2.31}{2005 December 5}{'unsetacronym added}\noindent +%\cmdname{unsetacronym}\verb'{'\meta{acr-name}\verb"}" +%\DescribeMacro{\unsetacronym}\\[10pt] +%This command will cause all subsequent uses of +%\cmdname{}\meta{acr-name} to produce the short version. +%To unset all acronyms +%do \cmdname{unsetallacronyms}.\DescribeMacro{\unsetallacronyms} +%\changes{2.31}{2005 December 5}{'unsetallacronyms added} +% +%\vspace{10pt} %\changes{2.14}{2005 May 28}{'ifacronymfirstuse added}\noindent %\cmdname{ifacronymfirstuse}% %\verb'{'\meta{acr-name}% @@ -932,6 +1019,8 @@ %be put in automatically using \icmdname{xspace}. %\changes{2.22}{2005 Sept 16}{Added provision for 'xspace} %\changes{2.23}{2005 Sept 17}{Fixed minor bug with hyperlinks and 'glsxspace} +%\changes{2.28}{2005 July 9}{Fixed erroneous spaces occuring while +%using xspace} % %\DescribeMacro{\acronymfont} %\changes{2.22}{2005 Sept 12}{Added 'acronymfont}% @@ -1053,6 +1142,36 @@ %\end{verbatim} %By default, \cmdname{glossarypreamble} and \cmdname{glossarypostamble} do nothing. % +%\changes{2.3}{2005 Nov 18}{'glsbeforenum}% +%\changes{2.3}{2005 Nov 18}{'glsafternum}% +%Any text required before or after the list of page numbers +%are specified by the commands \cmdname{glsbeforenum} +%\DescribeMacro{\glsbeforenum} +%and \cmdname{glsafternum}\DescribeMacro{\glsafternum}. +%By default, these commands do nothing, any redefinition +%of these commands should come somewhere before the +%relevant \cmdname{printglossary} command. For example: +%\begin{verbatim} +%\printglossary +%\renewcommand{\glsbeforenum}{(} +%\renewcommand{\glsafternum}{)} +%\printnotation +%\end{verbatim} +%This will put the page number list in brackets for the +%second glossary, but not the first. +% +%Individual glossaries can have their styles changed either +%by setting the style in the final optional argument +%to \icmdname{newglossarystyle} (see +%\autoref{sec:newglostype}) or using the command\DescribeMacro{setglossarystyle}:\\[10pt] +%\cmdname{setglossarystyle}[\meta{type}]\{\meta{style list}\}\\[10pt] +%For example: +%\begin{verbatim} +%\setglossarystyle[acronym]{style=long,border=true,cols=2} +%\end{verbatim} +%If \meta{type} is omitted, the change is applied to the main +%glossary. +% %\changes{1.1}{2004 August 14}{\relax Increased User Flexibility}% %\changes{2.14}{2005 May 29}{'setglossary added} %\DescribeMacro{\setglossary} @@ -1095,6 +1214,13 @@ %This setting corresponds to the \istkey{delim\_0} key in the %\appname{makeindex} style file. % +%Note that if you want a new line between the description +%and the list of page numbers you will need to use +%\cmdname{noexpand}. For example: +%\begin{verbatim} +%\setglossary{glodelim={\noexpand\newline}} +%\end{verbatim} +% %\item[\setglos{delimN}] %\changes{1.1}{2004 August 14}{\texttt{'delimN}} %The delimiter to be inserted between two @@ -1114,6 +1240,34 @@ %package option \pkgopt[none]{number} is chosen, the value is set %to empty. % +%\item[\setglos{gloskip}] +%\changes{2.3}{2005 Nov 18}{'gloskip} +%This specifies what to do between groups. +%If \pkgopt[list]{style} or \pkgopt[altlist]{style} this has the +%value \cmdname{indexspace}, otherwise it creates a blank line +% in the \envname{longtable} or \envname{supertabular} environment. +%This command corresponds to the \istkey{group\_skip} key in +%the \appname{makeindex} style file. +%Note that as from version 2.3, you should no longer redefine +%the command \cmdname{gloskip}. +% +%\item[\setglos{delimT}] +%\changes{2.3}{2005 Nov 18}{'delimT} +%The text to be inserted after the list of +%page numbers for an entry. (This corresponds to the +%\istkey{delim\_t} key in the \appname{makeindex} style file.) +%The default value depends on the glossary style. It does +%nothing for the list-type styles, and has the value +%\verb/\\/ for the tabular-type styles. Note that +%\setglos{delimT} is separate from \cmdname{glsafternum}. +% +%For example, if you are using a 2 column tabular style, +%and you want a blank line after every entry (not just +%after every group) you can do the following: +%\begin{verbatim} +%\setglossary{delimT={\cr & \cr},gloskip={}} +%\end{verbatim} +%Note the use of \cmdname{cr} instead of \verb/\\/. %\end{description} %Note that: %\begin{verbatim} @@ -1172,14 +1326,15 @@ %\envname{longtable} or %\envname{supertabular} %environment with argument specified by -%\cmdname{glossaryalignment}.\DescribeMacro{\glossaryalignment} +%\cmdname{glossaryalignment}\footnote{This isn't quite true +%anymore, see the documented code for clarification}.\DescribeMacro{\glossaryalignment} % %\changes{2.1}{2004 October 25}{made glossary compatible with array package} -%The above conflicts with the \stynamefmt{array} package, so as -%from version 2.1, if the \stynamefmt{array} package has been -%loaded \emph{prior} to loading the \stynamefmt{glossary} package, -%the new column type \texttt{G} will be defined and used -%instead of \cmdname{glossaryalignment}. +%\changes{2.3}{2005 Nov 18}{made glossary compatible with array package} +%The glossary package no longer conflicts with the \stynamefmt{array} +%package. Changes can now be made to \cmdname{glossaryalignment} +%regardless of whether or not the \stynamefmt{array} +%package has been used. % %The command \cmdname{gloitem}\DescribeMacro{\gloitem}\ indicates %what to do at the start of each glossary entry. @@ -1193,20 +1348,9 @@ %\verb"\item["\meta{text}\verb']\mbox{}\par'\\[5pt] %otherwise it will do\\[5pt] %\meta{text}\verb" &"\\[5pt] -%if it's the first -%item of the page or\\[5pt] -%\verb'\\ '\meta{text}\verb" &"\\[5pt] -%otherwise. %This command corresponds to the \istkey{item\_0} key in the %\appname{makeindex} style file. % -%The command \cmdname{gloskip}\DescribeMacro{\gloskip}\ specifies what to do between groups. -%If \pkgopt[list]{style} or \pkgopt[altlist]{style} this has the -%value \cmdname{indexspace}, otherwise it creates a blank line -% in the \envname{longtable} or \envname{supertabular} environment. -%This command corresponds to the \istkey{group\_skip} key in -%the \appname{makeindex} style file. -% %The command \cmdname{glossaryheader}\DescribeMacro{\glossaryheader}\ (if \pkgopt[long]{style} or \pkgopt[super]{style} is selected) %indicates what to do at the start of the \envname{longtable} or %\envname{supertabular} environment. If \pkgopt[none]{border}, it @@ -1252,6 +1396,7 @@ %\item \texttt{sampleNtn.tex} --- This has a glossary and defines %a new glossary type called \texttt{notation}. The glossary has %associated page numbers, but the new glossary type doesn't. +%The two glossaries have different styles. %You will need to do: %\begin{verbatim} %latex sampleNtn @@ -1346,6 +1491,15 @@ %however, the entries with the same name but multiple descriptions %will not be merged. % +%\item \texttt{sample4col.tex}---This illustrates how to +%modify the glossary style so that it has 4 columns. You +%will need to do: +%\begin{verbatim} +%latex sample4col +%makeglos.pl sample4col +%latex sample4col +%\end{verbatim} +% %\end{itemize} % %\section{LaTeX2HTML Style File} @@ -1419,6 +1573,10 @@ % %\section{Troubleshooting} %\label{sec:trouble} +% +%This is a list of common problems, for a more up-to-date FAQ, see +%\url{http://theoval.cmp.uea.ac.uk/~nlct/packages/faq/}. +% %\begin{enumerate} %\item My glossary hasn't appeared. % @@ -1476,6 +1634,14 @@ %in the list of acronyms, where \cmdname{}\meta{acr-name} is the %name of an acronym command. % +%\item My acronym has been expanded twice. +% +%By default, if any of your acronym commands occur within a +%group (this includes environments which form implicit grouping) +%the effect will be local to that group. You can either unset +%the acronym outside the group, or use the \pkgopt{global} +%package option. +% %\item I get an error when using the command %\icmdname{saveglosentry}. % @@ -1594,9 +1760,10 @@ %\end{verbatim} % %The \stynamefmt{glossary} package used to conflict with the -%\stynamefmt{array} package. This was fixed in version 2.1, -%however, you must load the \stynamefmt{array} package -%\emph{prior} to loading the \stynamefmt{glossary} package. +%\stynamefmt{array} package. This was fixed in version 2.1. +%As from version 2.3, it doesn't matter whether you load +%the \stynamefmt{glossary} package before or after the +%\stynamefmt{array} package. % %\item\label{itm:fragile} I get the following error: %\begin{verbatim} @@ -1734,13 +1901,8 @@ % %\section{Acknowledgements} % -%I would like to thank the following people for their -%suggestions: -%Jens~Happe, -%Dmitry~Katsubo, -%Markus~Lazanowski, -%Slava~Pestov and -%Dario~Teixeira +%I would like to thank all the many people who have made suggestions +%and pointed out bugs. % % \StopEventually{\PrintChanges\addcontentsline{toc}{section}{Change History}\PrintIndex\addcontentsline{toc}{section}{Index}} % @@ -1754,7 +1916,7 @@ % \subsection{Package Definition} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossary}[2005/09/27 2.24 (NLCT)] +\ProvidesPackage{glossary}[2006/07/09 2.38 (NLCT)] % \end{macrocode} % Load packages needed by glossary.sty: % \begin{macrocode} @@ -1835,7 +1997,14 @@ \newif\ifglsacronym \define@key{gloss}{acronym}[true]{\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}{\setboolean{glsacronym}{#1}}{% -\PackageError{glossary}{Glossary option 'acronym' is boolean}{The value of 'acronym' canonly be set to 'true' or 'false'}}} +\PackageError{glossary}{Glossary option 'acronym' is boolean}{The +value of 'acronym' can only be set to 'true' or 'false'}}} + +\newif\ifglsglobal +\define@key{gloss}{global}[true]{\ifthenelse{\equal{#1}{true}\or +\equal{#1}{false}}{\setboolean{glsglobal}{#1}}{% +\PackageError{glossary}{Glossary option 'global' is boolean}{The +value of 'global' can only be set to 'true' or 'false'}}} % \end{macrocode} % Set up defaults % \begin{macrocode} @@ -1863,9 +2032,10 @@ \let\glsxspace\relax}{% \let\glsxspace\xspace} % \end{macrocode} -% Temporarily disable xspace: +% Set "\glossaryalignment" to "\relax" before loading +% configuration file. % \begin{macrocode} -\newcommand{\gls@noxspace}[1]{{\let\glsxspace\relax#1}} +\let\glossaryalignment\relax % \end{macrocode} % Load configuation file if it exists % \begin{macrocode} @@ -1886,8 +2056,13 @@ % \end{macrocode} %Check to make sure that the options don't conflict. % \begin{macrocode} -\ifthenelse{\(\equal{\gls@style}{list} \or \equal{\gls@style}{altlist}\) \and \(\not\equal{\gls@header}{none} \or \not\equal{\gls@border}{none} \or \gls@cols=3\)} -{\PackageError{glossary}{You can't have option 'style=list' or 'style=altlist' in combination with any of the other options} +\ifthenelse{\(\equal{\gls@style}{list} \or +\equal{\gls@style}{altlist}\) \and +\(\not\equal{\gls@header}{none} \or \not\equal{\gls@border}{none} +\or \gls@cols=3\)} +{\PackageError{glossary}{You can't have option 'style=list' or +'style=altlist' in combination with any of the other style +options} {The 'list' and 'altlist' options don't have a header, border or number of columns option.}} {} % \end{macrocode} @@ -1940,6 +2115,16 @@ \gdef\@glo@n@me{}\setkeys{wrgloss}{#1}\relax \endgroup\@esphack} % \end{macrocode} +% Command to extract description key from glossary entry. +% \begin{macrocode} +\newcommand{\@gls@getdescr}[1]{% +\@bsphack\begingroup\@sanitize +\protected@edef\@gls@dos@tk@y{\noexpand\setkeys{wrgloss}{#1}}% +\def\@descr{}\@gls@dos@tk@y\relax +\global\let\@glo@desc\@descr +\endgroup\@esphack +} +% \end{macrocode} % Now do macro so you can have a hyperlink that takes % you to the entry in the glossary % \begin{macrocode} @@ -1947,24 +2132,42 @@ \glossref{\@glo@l@bel}{##1}\renewcommand{\@@wrglossary}{}}% \glossary} % \end{macrocode} -% Save a bit of typing. The followig command is new to v2.17 +% Save a bit of typing. The following command is new to v2.17 +% (New to version 2.36: store label in a list) +% \begin{macrocode} +\newcommand*{\@glo@label@list}{} +\toksdef\gls@ta=0 \toksdef\gls@tb=2 +\newcommand{\@glo@label@addtolist}[1]{% +\gls@ta={{#1}}\gls@tb=\expandafter{\@glo@label@list}% +\xdef\@glo@label@list{\the\gls@ta,\the\gls@tb}} +% \end{macrocode} +% First define command to store details: % \begin{macrocode} \newcommand*{\storeglosentry}[3][glossary]{% +\ifthenelse{\equal{#2}{*}}{% +\PackageError{glossary}{Glossary label '*' invalid}{You can't have +a glossary entry with a * as the label}}{% \@ifundefined{glo@#2@entry}{% +\@glo@label@addtolist{#2}% \expandafter\def\csname glo@#2@type\endcsname{#1}% \expandafter\def\csname glo@#2@entry\endcsname{#3}% \@gls@getn@me{#3}% \expandafter\protected@edef\csname glo@#2@name\endcsname{\@glo@n@me}% }{% \PackageError{glossary}{Glossary entry '#2' already -defined}{There already exists a glossary entry with the label '#2'}}% +defined}{There already exists a glossary entry with the label '#2'}}}% } - +% \end{macrocode} +% This command will not produce text in the document, but will +% produce the relevant glossary entry. +% \begin{macrocode} \providecommand{\useglosentry}[2][\relax]{% +\ifthenelse{\equal{#2}{*}}{\@for\@glolab:=\@glo@label@list\do{% +\ifthenelse{\equal{\@glolab}{}}{}{\useglosentry[#1]{\@glolab}}}}{% \@ifundefined{glo@#2@type}{% \PackageError{glossary}{Glossary entry '#2' undefined}{You need to define the entry using \string\storeglosentry\space before -using it.}}{% +using it.}}{{% \edef\@glostype{\csname glo@#2@type\endcsname}% \ifx#1\relax \protected@edef\@glo@cmd{\expandafter\noexpand\csname \@glostype\endcsname{\csname glo@#2@entry\endcsname}}% @@ -1972,13 +2175,17 @@ using it.}}{% \protected@edef\@glo@cmd{\expandafter\noexpand\csname \@glostype{\csname glo@#2@entry\endcsname,#1}}% \fi \@glo@cmd -}} - +}}}} +% \end{macrocode} +% This command will produce the specified text in the document +% (with a hyperlink if enabled), and will produce the relevant +% glossary entry. +% \begin{macrocode} \providecommand{\useGlosentry}[3][\relax]{% \@ifundefined{glo@#2@type}{% \PackageError{glossary}{Glossary entry '#2' undefined}{You need to define the entry using \string\storeglosentry\space before -using it.}}{% +using it.}}{{% \edef\@glostype{x\csname glo@#2@type\endcsname}% \ifx#1\relax \protected@edef\@glo@cmd{\expandafter\noexpand\csname \@glostype\endcsname{\csname glo@#2@entry\endcsname}}% @@ -1986,8 +2193,11 @@ using it.}}{% \protected@edef\@glo@cmd{\expandafter\noexpand\csname \@glostype\endcsname{\csname glo@#2@entry\endcsname,#1}}% \fi \@glo@cmd{#3}% -}} - +}}} +% \end{macrocode} +% As above, but the text displayed in the document is constructed from +% the name key. +% \begin{macrocode} \newcommand{\gls}[2][\relax]{\useGlosentry[#1]{#2}{\csname glo@#2@name\endcsname}} % \end{macrocode} % This command was defined in earlier verions, but doesn't @@ -2038,7 +2248,12 @@ using it.}}{% \def\@glostype{glossary} \newcommand{\delimN}{\csname @\@glostype @delimN\endcsname} \newcommand{\delimR}{\csname @\@glostype @delimR\endcsname} -\newcommand{\glodelim}{\csname @\@glostype @glodelim\endcsname} +\newcommand{\gloitem}{\csname @\@glostype @gloitem\endcsname} +\newcommand{\gloskip}{\csname @\@glostype @gloskip\endcsname} +\newcommand{\delimT}{\glsafternum +\csname @\@glostype @delimT\endcsname} +\newcommand{\glodelim}{\csname @\@glostype @glodelim\endcsname +\glsbeforenum} % \end{macrocode} % Allow user to change number format for different @@ -2048,6 +2263,8 @@ using it.}}{% \define@key{glossnum}{type}{\def\@glsnumtype{#1}} \define@key{glossnum}{delimN}{\def\@delimN{#1}} \define@key{glossnum}{delimR}{\def\@delimR{#1}} +\define@key{glossnum}{delimT}{\def\@delimT{#1}} +\define@key{glossnum}{gloskip}{\def\@gloskip{#1}} \define@key{glossnum}{glodelim}{\def\@glodelim{#1}} \providecommand{\ignore}[1]{} @@ -2056,6 +2273,8 @@ using it.}}{% \def\@glsnumtype{glossary}% \def\@delimN{@dontchange@}% \def\@delimR{@dontchange@}% +\def\@delimT{@dontchange@}% +\def\@gloskip{@dontchange@}% \def\@glodelim{@dontchange@}% \setkeys{glossnum}{#1}\relax \@ifundefined{print\@glsnumtype}{% @@ -2070,19 +2289,27 @@ Glossary type '\@glsnumtype' has not been defined} \expandafter\xdef\csname @\@glsnumtype @delimR\endcsname{}% }{}% }% - +% \ifthenelse{\equal{\@delimN}{@dontchange@}}{}{% \expandafter\xdef\csname @\@glsnumtype @delimN\endcsname{% -\@delimN}} - +\@delimN}}% +% \ifthenelse{\equal{\@delimR}{@dontchange@}}{}{% \expandafter\xdef\csname @\@glsnumtype @delimR\endcsname{% -\@delimR}} - +\@delimR}}% +% +\ifthenelse{\equal{\@delimT}{@dontchange@}}{}{% +\expandafter\xdef\csname @\@glsnumtype @delimT\endcsname{% +\@delimT}}% +% +\ifthenelse{\equal{\@gloskip}{@dontchange@}}{}{% +\expandafter\xdef\csname @\@glsnumtype @gloskip\endcsname{% +\@gloskip}}% +% \ifthenelse{\equal{\@glodelim}{@dontchange@}}{}{% \expandafter\xdef\csname @\@glsnumtype @glodelim\endcsname{% -\@glodelim} -} +\@glodelim}% +}% }} % \end{macrocode} % Now define the command "\printglossary" which will print the contents of the glossary file. @@ -2113,34 +2340,74 @@ Glossary type '\@glsnumtype' has not been defined} % version 2.24) % \begin{macrocode} \providecommand{\glossarytitle}{% -\@ifundefined{chapter} -{\section*{\@glossaryname}\relax - \ifgls@toc\@glosaddtoc{section}\fi} -{\ifthenelse{\boolean{gls@section}} - {\section*{\@glossaryname}\relax - \ifgls@toc\@glosaddtoc{section}\fi} - {\ifgls@hypertoc\@ifundefined{if@twoside}{\clearpage}{% - \if@twoside\@ifundefined{cleardoublepage}{\cleardoublepage}{\clearpage}\else - \clearpage\fi}\phantomsection\@glosaddtoc{chapter}\fi\chapter*{\@glossaryname}\relax - \ifgls@toc\@glosaddtoc{chapter}\fi}} +\@ifundefined{chapter}% +% \chapter not defined +{% +\ifgls@hypertoc +% hypertoc option used +\phantomsection% add anchor before \section* +\@glosaddtoc{section}% +\section*{\@glossaryname}\relax +\else +% hypertoc=false +\section*{\@glossaryname}\relax +% only add contentsline if toc=true +\ifgls@toc\@glosaddtoc{section}\fi +\fi}% +{% \chapter defined +\ifthenelse{\boolean{gls@section}}% +{% user requested \section +\ifgls@hypertoc +% hypertoc=true +\phantomsection% add anchor before \section* +\@glosaddtoc{section}% +\section*{\@glossaryname}\relax +\else +%hypertoc=false +\section*{\@glossaryname}\relax +% only add contentsline if toc=true +\ifgls@toc\@glosaddtoc{section}\fi +\fi}% +{% use \chapter +\ifgls@hypertoc +% hypertoc=true +% chapters usually start a new page, so to ensure +% anchor is at the top of the correct page, issue +% a \clearpage (or \cleardoublepage) to place the +% anchor at the correct place +\@ifundefined{if@twoside}{% +% If document class doesn't support twosided documents +% just do \clearpage +\clearpage}{% +\if@twoside +% Document is two-sided +% If \cleardoublepage is defined, use that +% otherwise just do \clearpage +\@ifundefined{cleardoublepage}{\clearpage}{\cleardoublepage}% +\else +% One-sided document, just do \clearpage +\clearpage +\fi}% +\phantomsection% add anchor before \chapter +\@glosaddtoc{chapter}% +\fi +\chapter*{\@glossaryname}\relax +% only add contentsline if toc=true +\ifgls@toc\@glosaddtoc{chapter}\fi}} \markboth{\@shortglossaryname}{\@shortglossaryname}% } % \end{macrocode} % Now define theglossary environment. Version 2.2: % check to see if defined already % \begin{macrocode} -\@ifundefined{theglossary}{ -\newenvironment{theglossary} -{\glossarytitle - \glossarypreamble\@bef@reglos} - {\@ftergl@s\glossarypostamble} -}{% -\PackageWarning{glossary}{Redefining 'theglossary' environment} -\renewenvironment{theglossary} -{\glossarytitle - \glossarypreamble\@bef@reglos} - {\@ftergl@s\glossarypostamble} -} +\@ifundefined{theglossary}{% +\newenvironment{theglossary}{}{}}{% +\PackageWarning{glossary}{Redefining 'theglossary' environment}} +% \end{macrocode} +% \begin{macrocode} +\renewenvironment{theglossary}{% +\glossarytitle +\glossarypreamble\@bef@reglos}{\@ftergl@s\glossarypostamble} % \end{macrocode} % Provide a means to add text to the beginning or end % of the glossary. @@ -2162,21 +2429,62 @@ Glossary type '\@glsnumtype' has not been defined} \newcommand{\@bef@reglos}{\global\gloitemfirsttrue\beforeglossary} \newcommand{\@ftergl@s}{\afterglossary\global\gloitemfirstfalse} % \end{macrocode} +% Set up defaults. +% \begin{macrocode} +\newcommand{\glossaryalignment}{\relax} +\newcommand{\@gls@align@glossary}{} +\newcommand{\glosstail}{% +\@ifundefined{@gls@tail@\@glostype}{% +\PackageError{glossary}{No glossary tail defined for glossary +type '\@glostype'}{}}{% +\csname @gls@tail@\@glostype\endcsname}} +\newcommand{\@gls@tail@glossary}{} +\newcommand{\afterglossary}{% +\@ifundefined{@gls@afterglos@\@glostype}{% +\PackageError{glossary}{No after glossary defined for glossary +type '\@glostype'}{}}{% +\csname @gls@afterglos@\@glostype\endcsname}} +\newcommand{\beforeglossary}{% +\@ifundefined{@gls@beforeglos@\@glostype}{% +\PackageError{glossary}{No before glossary defined for glossary +type '\@glostype'}{}}{% +\csname @gls@beforeglos@\@glostype\endcsname}} +\newcommand{\@gls@beforeglos@glossary}{} +\newcommand{\@gls@afterglos@glossary}{} +\newcommand{\@glossary@glodelim}{} +\newcommand{\@glossary@delimT}{} +\newcommand{\glsafternum}{} +\newcommand{\glsbeforenum}{} +\newcommand{\@glossary@gloskip}{} +\newcommand{\@glossary@gloitem}[1]{#1} +% \end{macrocode} % Now define what to do depending on which style has been selected. -%First deal with the "list" and "altlist" style, as they're the easiest. +% First define command to switch to "list" style: % \begin{macrocode} - -\ifthenelse{\equal{\gls@style}{list} \or \equal{\gls@style}{altlist}} -{ -\newcommand{\beforeglossary}{\begin{description}} -\newcommand{\afterglossary}{\end{description}} -\newcommand{\gloskip}{\indexspace} -\ifthenelse{\equal{\gls@style}{list}} - {\newcommand{\gloitem}[1]{\item[#1]} - \newcommand{\@glossary@glodelim}{, }} - {\newcommand{\gloitem}[1]{\item[#1]\mbox{}\par} - \newcommand{\@glossary@glodelim}{ }} -}{ +\newcommand{\gls@setlist}[1][glossary]{% +\expandafter\def\csname @gls@beforeglos@#1\endcsname{% +\begin{description}}% +\expandafter\def\csname @gls@afterglos@#1\endcsname{% +\end{description}}% +\expandafter\def\csname @#1@gloskip\endcsname{\indexspace}% +\expandafter\def\csname @#1@glodelim\endcsname{, }% +\expandafter\def\csname @#1@gloitem\endcsname##1{\item[##1]}% +\expandafter\def\csname @#1@glodelim\endcsname{, }% +\expandafter\def\csname @#1@delimT\endcsname{} +} +% \end{macrocode} +% Next define command to switch to "altlist" style: +% \begin{macrocode} +\newcommand{\gls@setaltlist}[1][glossary]{% +\expandafter\def\csname @gls@beforeglos@#1\endcsname{% +\begin{description}}% +\expandafter\def\csname @gls@afterglos@#1\endcsname{% +\end{description}}% +\expandafter\def\csname @#1@gloskip\endcsname{\indexspace}% +\expandafter\def\csname @#1@gloitem\endcsname##1{\item[##1]\mbox{}\nopagebreak\par\nopagebreak}% +\expandafter\def\csname @#1@glodelim\endcsname{ }% +\expandafter\def\csname @#1@delimT\endcsname{} +} % \end{macrocode} %Now deal with the other styles. I orginally used a "tabular" environment, %but obviously this doesn't work for a glossary longer than one page. @@ -2191,102 +2499,199 @@ Glossary type '\@glsnumtype' has not been defined} {If you want the "super" option, you have to have the "supertab" package installed.}}} } {\RequirePackage{longtable}} - +% \end{macrocode} +% Define new length specifying the width of the description field. +% \begin{macrocode} \newlength{\descriptionwidth} \setlength{\descriptionwidth}{0.6\textwidth} - -\ifthenelse{\equal{\gls@header}{none}} -{ - \ifthenelse{\equal{\gls@border}{none}} - {\newcommand{\glossaryheader}{}} - {\newcommand{\glossaryheader}{\hline }} +% \end{macrocode} +% Initalise header to nothing. If this command is redefined it +% will override the default header. This enables the user to +% redesign the header by changing the definition of +% "\glossaryheader" (thus providing backward compatibility.) +% \begin{macrocode} +\newcommand*{\glossaryheader}{\relax} +% \end{macrocode} +% \begin{macrocode} +\newcommand{\@glossaryheader}{% +\ifx\glossaryheader\relax +\csname @\@glostype @header\endcsname +\else +\glossaryheader +\fi } -{ +% \end{macrocode} +% Define command to set header style. +% \begin{macrocode} +\newcommand{\gls@setheader}[1][glossary]{% +\ifthenelse{\equal{\gls@header}{none}}% +{% +\ifthenelse{\equal{\gls@border}{none}} +{\expandafter\def\csname @#1@header\endcsname{}% +}{\expandafter\def\csname @#1@header\endcsname{\hline}}% +}{% \ifnum\gls@cols=2\relax - \ifthenelse{\equal{\gls@border}{none}} - {\newcommand{\glossaryheader} - {\bfseries\entryname & \bfseries \descriptionname\\}} - {\newcommand{\glossaryheader} - {\hline\bfseries\entryname & \bfseries\descriptionname - \\\hline\hline}} +\ifthenelse{\equal{\gls@border}{none}} +{% +\expandafter\def\csname @#1@header\endcsname{% +\bfseries\entryname & \bfseries \descriptionname\\}}% +{% +\expandafter\def\csname @#1@header\endcsname{% +\hline\bfseries\entryname & \bfseries\descriptionname +\\\hline\hline}}% \else - \ifthenelse{\equal{\gls@border}{none}} - {\newcommand{\glossaryheader} - {\bfseries\entryname & \bfseries \descriptionname & \\}} - {\newcommand{\glossaryheader} - {\hline\bfseries\entryname &\bfseries\descriptionname & - \\\hline\hline}} +\ifthenelse{\equal{\gls@border}{none}} +{% +\expandafter\def\csname @#1@header\endcsname{% +\bfseries\entryname & \bfseries \descriptionname & \\}}% +{% +\expandafter\def\csname @#1@header\endcsname{% +\hline\bfseries\entryname &\bfseries\descriptionname & +\\\hline\hline}}% \fi -} - +}} +% \end{macrocode} +% Define command to set glossary alignment and borders +% \begin{macrocode} +\newcommand{\gls@setalignment}[1][glossary]{% \ifthenelse{\equal{\gls@border}{none}} { \ifnum\gls@cols=2\relax - \@ifundefined{newcolumntype}{\newcommand{\glossaryalignment}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}}}{ - \newcolumntype{G}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}}} +\expandafter\def\csname @gls@align@#1\endcsname{% +@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}} \else - \@ifundefined{newcolumntype}{\newcommand{\glossaryalignment}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l}}{ - \newcolumntype{G}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l}} +\expandafter\def\csname @gls@align@#1\endcsname{% +@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l} \fi - - \ifthenelse{\equal{\gls@style}{super}}{ - \newcommand{\afterglossary}{ \\\end{supertabular}} - } - { - \newcommand{\afterglossary}{ \\\end{longtable}} - } - - \newcommand{\glosstail}{} -} -{ +% +\expandafter\def\csname @gls@tail@#1\endcsname{}% +}{% \ifnum\gls@cols=2\relax - \@ifundefined{newcolumntype}{\newcommand{\glossaryalignment}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}|}}{ - \newcolumntype{G}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}|}} +\expandafter\def\csname @gls@align@#1\endcsname{% +|@{\hspace{\tabcolsep}\bfseries +}lp{\descriptionwidth}|} \else - \@ifundefined{newcolumntype}{\newcommand{\glossaryalignment}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l|}}{ - \newcolumntype{G}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l|}} +\expandafter\def\csname @gls@align@#1\endcsname{% +|@{\hspace{\tabcolsep}\bfseries +}lp{\descriptionwidth}l|} \fi - - \ifthenelse{\equal{\gls@style}{super}}{ - \newcommand{\afterglossary}{ \\\hline\end{supertabular}} - } - { - \newcommand{\afterglossary}{ \\\hline\end{longtable}} - } - - \newcommand{\glosstail}{\hline} -} - -\ifthenelse{\equal{\gls@style}{super}} -{ - \@ifundefined{newcolumntype}{ - \newcommand{\beforeglossary} - {\tablehead{\glossaryheader}\tabletail{\glosstail} - \begin{supertabular}{\glossaryalignment}}} - {\newcommand{\beforeglossary} - {\tablehead{\glossaryheader}\tabletail{\glosstail} - \begin{supertabular}{G}}} +% +\expandafter\def\csname @gls@tail@#1\endcsname{\hline}% +}% +% +\expandafter\def\csname @#1@delimT\endcsname{\\} +% +\ifnum\gls@cols=2\relax +\expandafter\def\csname @#1@gloskip\endcsname{& \\}% +\expandafter\def\csname @#1@glodelim\endcsname{, }% +\else +\expandafter\def\csname @#1@gloskip\endcsname{& & \\}% +\expandafter\def\csname @#1@glodelim\endcsname{& }% +\fi +\expandafter\def\csname @#1@gloitem\endcsname##1{##1 &}% } -{ - \@ifundefined{newcolumntype}{\newcommand{\beforeglossary} - {\begin{longtable}{\glossaryalignment} - \glossaryheader\endhead\glosstail\endfoot}} - {\newcommand{\beforeglossary} - {\begin{longtable}{G} - \glossaryheader\endhead\glosstail\endfoot}} +% \end{macrocode} +% Need a way to avoid conflict with the array package. In an +% earlier version I defined a new column type if the array +% package was being used, however this restricts the ability +% to have multiple glossaries with different column alignments. +% \begin{macrocode} +\newcommand{\@st@rtglostable}[2]{% +\gls@ta={\begin{#1}}\gls@tb=\expandafter{#2}% +\edef\@st@rtglost@ble{\the\gls@ta{\the\gls@tb}} +\@st@rtglost@ble} +% \end{macrocode} +% Define command to switch to "super" style: +% \begin{macrocode} +\newcommand{\gls@setsuper}[1][glossary]{% +\gls@setalignment[#1]% +\gls@setheader[#1]% +% +\expandafter\def\csname @gls@beforeglos@#1\endcsname{% +\tablehead{\@glossaryheader}\tabletail{\glosstail}% +\if\glossaryalignment\relax +\expandafter\let\expandafter\@glossaryalignment\csname @gls@align@#1\endcsname +\else +\let\@glossaryalignment\glossaryalignment +\fi +\@st@rtglostable{supertabular}\@glossaryalignment} +% +\expandafter\def\csname @gls@afterglos@#1\endcsname{% +\end{supertabular}}% } - -\ifnum\gls@cols=2\relax -\newcommand{\gloskip}{\ifgloitemfirst\global\gloitemfirstfalse \else\\ \fi &} -\newcommand{\@glossary@glodelim}{, } +% \end{macrocode} +% Define command to switch to "long" style: +% \begin{macrocode} +\newcommand{\gls@setlong}[1][glossary]{% +\gls@setalignment[#1]% +\gls@setheader[#1]% +% +\expandafter\def\csname @gls@beforeglos@#1\endcsname{% +\if\relax\glossaryalignment +\expandafter\let\expandafter\@glossaryalignment\csname @gls@align@#1\endcsname \else -\newcommand{\gloskip}{\ifgloitemfirst\global\gloitemfirstfalse \else\\ \fi & &} -\newcommand{\@glossary@glodelim}{& } +\let\@glossaryalignment\glossaryalignment \fi -\newcommand{\gloitem}[1]{\ifgloitemfirst\global\gloitemfirstfalse #1 \else \\#1 \fi &} +\@st@rtglostable{longtable}{\@glossaryalignment} +\@glossaryheader\endhead\glosstail\endfoot} + +% +\expandafter\def\csname @gls@afterglos@#1\endcsname{% +\end{longtable}}% } +% \end{macrocode} +% Define command to set the glossary style. +% \begin{macrocode} +\newcommand{\@setglossarystyle}[1][glossary]{% +\@ifundefined{gls@set\gls@style}{% +\PackageError{glossary}{Glossary style '\gls@style' undefined}{}}{% +\csname gls@set\gls@style\endcsname[#1]}} +% \end{macrocode} +% Set glossary style +% \begin{macrocode} +\@setglossarystyle +% \end{macrocode} +% Define keys to change glossary style +% \begin{macrocode} +\define@key{glosstyle} + {style} + {\ifthenelse{\equal{#1}{list} \or \equal{#1}{altlist} \or \equal{#1}{super} \or \equal{#1}{long}} + {\def\gls@style{#1}} + {\PackageError{glossary} + {Unknown glossary style '#1'} + {Available styles are: list, altlist, super and long}}} -\ifthenelse{\equal{\gls@number}{none} \and \gls@cols<3}{\renewcommand{\@glossary@glodelim}{}}{} +\define@key{glosstyle} + {header}[plain]{\ifthenelse{\equal{#1}{none} \or \equal{#1}{plain}} + {\def\gls@header{#1}} + {\PackageError{glossary} + {Unknown glossary style '#1'} + {Available styles are: none and plain}}} + +\define@key{glosstyle} + {border}[plain]{\ifthenelse{\equal{#1}{none} \or \equal{#1}{plain}} + {\def\gls@border{#1}} + {\PackageError{glossary} + {Unknown glossary border '#1'} + {Available styles are: none and plain}}} +\define@key{glosstyle}{cols}{\gls@cols=#1\relax +\ifthenelse{\gls@cols<2 \or \gls@cols>3} + {\PackageError{glossary} + {invalid number of columns} + {The cols option can only be 2 or 3}} + {}} +% \end{macrocode} +% \begin{macrocode} +\newcommand{\setglossarystyle}[2][glossary]{% +\setkeys{glosstyle}{#2}% +\@setglossarystyle[#1]% +} +% \end{macrocode} +% Set the delimiter for the case where there is no numbering +% and there aren't 3 columns. +% \begin{macrocode} +\ifthenelse{\equal{\gls@number}{none} \and \gls@cols<3}{% +\renewcommand{\@glossary@glodelim}{}}{} % \end{macrocode} % \subsection{Makeindex style file} %This is the code to generate the ".ist" file. @@ -2309,6 +2714,7 @@ Glossary type '\@glsnumtype' has not been defined} \write\istfile{page_compositor "\pagecompositor"} \write\istfile{delim_n "\string\\delimN "} \write\istfile{delim_r "\string\\delimR "} +\write\istfile{delim_t "\string\\delimT "} \closeout\istfile } \catcode`\%14\relax @@ -2337,9 +2743,13 @@ Glossary type '\@glsnumtype' has not been defined} \@bsphack\begingroup\@sanitize\@index} % \end{macrocode} %\subsection{Defining new glossary type} -%First parameter name of new glossary type e.g.\ "notation". -%Second parameter extension of output file (equivalent to "ind" or "glo". -%Third parameter extension of input file (equivalent to "idx" or "gls"). +% First parameter (optional) is the extension of the log file +% (information used by makeglos.pl but not \LaTeX). +% Second parameter is the name of new glossary type +% e.g.\ "notation". Third parameter is the extension of output +% file (equivalent to "ind" or "glo". Fourth parameter +% is the extension of input file (equivalent to "idx" or "gls"). +% The fifth parameter (optional) is the format. % \begin{macrocode} \newcommand{\@newglossarytype}[4][glg]{} \newcommand{\newglossarytype}[4][glg]{ @@ -2349,7 +2759,6 @@ Glossary type '\@glsnumtype' has not been defined} \expandafter\gdef\csname glsX\@glstype Xnumformat\endcsname{\glsXglossaryXnumformat}% \expandafter\gdef\csname @\@glstype @delimN\endcsname{\@glossary@delimN}% \expandafter\gdef\csname @\@glstype @delimR\endcsname{\@glossary@delimR}% -\expandafter\gdef\csname @\@glstype @glodelim\endcsname{\@glossary@glodelim}% \expandafter\gdef\csname @gls@\@glstype @inext\endcsname{#4}% \expandafter\def\csname @gls@#2@type\endcsname{#4}% \expandafter\edef\csname make\@glstype\endcsname{% @@ -2371,12 +2780,14 @@ Glossary type '\@glsnumtype' has not been defined} }{% \noexpand\edef\noexpand\@shortglossaryname{% \noexpand\csname short\@glstype name\noexpand\endcsname}}% -\noexpand\@prntgl@ss@ry{\@glsin}} +\noexpand\@prntgl@ss@ry{\@glsin}}% }{\PackageError{glossary}{Command \expandafter\string\csname #2\endcsname \space already defined}{% You can't call your new glossary type '#2' because there already -exists a command with this name}} -} +exists a command with this name}}% +\@@n@wglostype} +\newcommand{\@@n@wglostype}[1][]{% +\setglossarystyle[\@glstype]{#1}} % \end{macrocode} % Define equivalent of "\makeglossary": % \begin{macrocode} @@ -2462,11 +2873,18 @@ exists a command with this name}} % \begin{macrocode} \newcommand{\glsprimaryfmt}[1]{\textbf{\glsnumformat{#1}}} % \end{macrocode} +% Specify how to control the way the name key is +% set for acronyms. % \begin{macrocode} -%\newcommand{\acronymlabprefix}{GGG} \newcommand{\@acronymnamefmt}{\glolong\ (\gloshort)} \newcommand{\setacronymnamefmt}[1]{\def\@acronymnamefmt{#1}} % \end{macrocode} +% Specify how to control the way the description key is +% set for acronyms. +% \begin{macrocode} +\newcommand{\@acronymdescfmt}{\glodesc} +\newcommand{\setacronymdescfmt}[1]{\def\@acronymdescfmt{#1}} +% \end{macrocode} % Format the acronym abbreviation in the format specified % by \verb'\acronymfont'. This simply prints its % argument by default. @@ -2479,64 +2897,70 @@ exists a command with this name}} \ifthenelse{\equal{#1}{}}{\renewcommand\@acrnmcmd{#2}}{\renewcommand\@acrnmcmd{#1}} \@ifundefined{\@acrnmcmd}{% \expandafter\newcommand\csname\@acrnmcmd short\endcsname{#2\protect\glsxspace} +\expandafter\newcommand\csname\@acrnmcmd @nx@short\endcsname{#2} \expandafter\newcommand\csname\@acrnmcmd long\endcsname{#3\protect\glsxspace} +\expandafter\newcommand\csname\@acrnmcmd @nx@long\endcsname{#3} \def\@acrn@entry{#4} { +% extract description +\@gls@getdescr{\@acrn@entry}% +\let\glodesc\@glo@desc% \def\glolong{#3}% \def\gloshort{\noexpand\acronymfont{#2}}% \expandafter\protected@xdef\expandafter\@acrnamefmt{\@acronymnamefmt} +\expandafter\protected@xdef\expandafter\@acrdesc{\@acronymdescfmt} } \@acr@addtolist{\@acrnmcmd} -\protected@edef\@acr@glsentry{name=\@acrnamefmt,format=glsnumformat,sort=\@acrnmcmd,\@acrn@entry} +\protected@edef\@acr@glsentry{name={\@acrnamefmt},format=glsnumformat,sort={\@acrnmcmd},\@acrn@entry,description={\@acrdesc}} \newboolean{\@acrnmcmd first}\setboolean{\@acrnmcmd first}{true} \expandafter\protected@edef\csname \@acrnmcmd\endcsname{\noexpand\@ifstar{\csname @s@\@acrnmcmd\endcsname}{\csname @\@acrnmcmd\endcsname}} -\ifglshyperacronym +\ifglshyperacronym % hyperlinks % unstarred version \expandafter\protected@edef\csname @\@acrnmcmd\endcsname{% \noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{% -\noexpand\gls@noxspace{\csname\@acrnmcmd long\endcsname\noexpand\@acrnmins\ +\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\ (\noexpand\xacronym{\@acr@glsentry}{% -\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}% -})}\noexpand\setboolean{\@acrnmcmd first}{false}% +\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}% +})\noexpand\unsetacronym{\@acrnmcmd}% }{\noexpand\xacronym{\@acr@glsentry}{% -\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}\noexpand\@acrnmins}}\noexpand\glsxspace} +\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}\noexpand\@acrnmins}}\noexpand\glsxspace} % starred version \expandafter\protected@edef\csname @s@\@acrnmcmd\endcsname{% \noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{% -\noexpand\gls@noxspace{\noexpand\expandafter\noexpand\MakeUppercase -\csname\@acrnmcmd long\endcsname\noexpand\@acrnmins\ +\noexpand\expandafter\noexpand\MakeUppercase +\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\ (\noexpand\xacronym{\@acr@glsentry}{% -\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}% -})}% -\noexpand\setboolean{\@acrnmcmd first}{false}}{% +\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}% +})% +\noexpand\unsetacronym{\@acrnmcmd}}{% \noexpand\xacronym{\@acr@glsentry}{% \noexpand\acronymfont{\noexpand\expandafter\noexpand\MakeUppercase -\csname\@acrnmcmd short\endcsname}% +\csname\@acrnmcmd @nx@short\endcsname}% \noexpand\@acrnmins}}\noexpand\glsxspace} -\else +\else % no hyperlinks % unstarred version \expandafter\protected@edef\csname @\@acrnmcmd\endcsname{% \noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{% -\noexpand\gls@noxspace{\csname\@acrnmcmd long\endcsname\ +\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\ (\noexpand\acronym{\@acr@glsentry}{% -\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}% -})}\noexpand\setboolean{\@acrnmcmd first}{false}% +\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}% +})\noexpand\unsetacronym{\@acrnmcmd}% }{\noexpand\acronym{\@acr@glsentry}{% -\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}}}% +\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}\noexpand\@acrnmins}}% \noexpand\glsxspace} % starred version \expandafter\protected@edef\csname @s@\@acrnmcmd\endcsname{% \noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{% -\noexpand\gls@noxspace{\noexpand\expandafter +\noexpand\expandafter \noexpand\MakeUppercase -\csname\@acrnmcmd long\endcsname\noexpand\@acrnmins\ +\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\ (\noexpand\acronym{\@acr@glsentry}{% -\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}% -})}% -\noexpand\setboolean{\@acrnmcmd first}{false}}{% +\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}% +})% +\noexpand\unsetacronym{\@acrnmcmd}}{% \noexpand\acronym{\@acr@glsentry}{% \noexpand\acronymfont{\noexpand\expandafter\noexpand\MakeUppercase -\csname\@acrnmcmd short\endcsname}% +\csname\@acrnmcmd @nx@short\endcsname}% \noexpand\@acrnmins}}\noexpand\glsxspace} \fi }{% @@ -2555,21 +2979,23 @@ exists a command with this name}} \newcommand{\@acrln}[1]{\@ifundefined{#1long}{% \PackageError{glossary}{Acronym '#1' has not been defined}{}}{% -\gls@noxspace{\csname#1long\endcsname}}} +\csname#1@nx@long\endcsname}} \newcommand{\@sacrln}[1]{\@ifundefined{#1long}{% \PackageError{glossary}{Acronym '#1' has not been defined}{}}{% -\gls@noxspace{\expandafter\expandafter\expandafter -\MakeUppercase\csname#1long\endcsname}}} +\expandafter\expandafter\expandafter +\MakeUppercase\csname#1@nx@long\endcsname}} \newcommand{\acrsh}{\@ifstar\@sacrsh\@acrsh} \newcommand{\@acrsh}[1]{\@ifundefined{#1short}{% -\PackageError{glossary}{Acronym '#1' has not been defined}{}}{\acronymfont{\gls@noxspace{\csname#1short\endcsname}}}} +\PackageError{glossary}{Acronym '#1' has not been defined}{}}{% +\acronymfont{\csname#1@nx@short\endcsname}}} \newcommand{\@sacrsh}[1]{\@ifundefined{#1short}{% \PackageError{glossary}{Acronym '#1' has not been defined}{}}{% -\acronymfont{\gls@noxspace{\expandafter\expandafter\expandafter\MakeUppercase\csname#1short\endcsname}}}} +\acronymfont{\expandafter\expandafter\expandafter +\MakeUppercase\csname#1@nx@short\endcsname}}} \newcommand{\ifacronymfirstuse}[3]{% \@ifundefined{if#1first}{% @@ -2579,10 +3005,26 @@ exists a command with this name}} \newcommand{\resetacronym}[1]{% \@ifundefined{if#1first}{% \PackageError{glossary}{Acronym '#1' not defined}{}}{% -\setboolean{#1first}{true}}} +\ifglsglobal +\expandafter\global\csname #1firsttrue\endcsname +\else +\setboolean{#1first}{true}% +\fi}} + +\newcommand{\unsetacronym}[1]{% +\@ifundefined{if#1first}{% +\PackageError{glossary}{Acronym '#1' not defined}{}}{% +\ifglsglobal +\expandafter\global\csname #1firstfalse\endcsname +\else +\setboolean{#1first}{false}% +\fi}} \newcommand{\resetallacronyms}{% \@for\@acr:=\@acr@list\do{\resetacronym{\@acr}}} + +\newcommand{\unsetallacronyms}{% +\@for\@acr:=\@acr@list\do{\unsetacronym{\@acr}}} % \end{macrocode} %These commands are provided to make it easier change the page number format to bf, sf, tt and it %if you are using hyperlinks @@ -2658,7 +3100,7 @@ exists a command with this name}} % \begin{macrocode} \ifglsacronym \newglossarytype[alg]{acronym}{acr}{acn} -\newcommand{\acronymname}{List of Acronyms} +\providecommand{\acronymname}{List of Acronyms} \else \let\acronym=\glossary \let\xacronym=\xglossary @@ -2676,7 +3118,7 @@ exists a command with this name}} # File : makeglos # Author : Nicola Talbot -# Version : 1.3 (2005/06/28) +# Version : 1.4 (2005/11/19) # Description: simple Perl script that calls makeindex. # Intended for use with "glossary.sty" (saves having to remember # all the various switches) @@ -2953,6 +3395,11 @@ sub makeindex{ for ($i=0; $i <= $j; $i++) { + # remove all but the last \delimT + while ($item[$i]{'desc'}=~s/\\delimT/$&/sg > 1) + { + $item[$i]{'desc'}=~s/\\delimT//s; + } print OUTPUT "\\gloitem ", $item[$i]{'name'}, $item[$i]{'desc'}; } @@ -2977,7 +3424,7 @@ sub makeindex{ % \begin{macrocode} @rem = '-*- Perl -*-
@echo off
-perl -S %0.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
+perl -S %~dp0makeglos.pl %*
% \end{macrocode} % \begin{macrocode} %</makeglos.bat> @@ -2988,8 +3435,8 @@ perl -S %0.pl %1 %2 %3 %4 %5 %6 %7 %8 %9 % \begin{macrocode} # File : glossary.perl # Author : Nicola Talbot -# Date : 8 July 2005 -# Version : 1.02 +# Date : 5 December 2005 +# Version : 1.03 # Description : LaTeX2HTML implementation of glossary package. package main; @@ -3759,6 +4206,36 @@ sub do_cmd_resetallacronyms{ $_; } +sub do_cmd_unsetacronym{ + local($_) = @_; + local($cmdname); + + $cmdname = &missing_braces unless + (s/$next_pair_pr_rx/$cmdname=$2;''/eo); + + if (defined %{$acronym{$cmdname}}) + { + $global{"${cmdname}first"} = 0; + } + else + { + &write_warnings("acronym '$cmdname' not defined"); + } + + $_; +} + +sub do_cmd_unsetallacronyms{ + local($_) = @_; + + foreach $key (keys %acronym) + { + $global{"${key}first"} = 0; + } + + $_; +} + %savedglosentry = (); # This command is deprecated @@ -4067,6 +4544,10 @@ merge them. This can be done using \texttt{makeglos.pl}, and passing the option \texttt{-m}. +If a comma appears within the name or description, grouping +must be used: \xglossary{name=page list,description={a list +of individual pages or page ranges, e.g.\ 1,2,4,7-9}}{page list} + \printglossary \end{document} @@ -4074,29 +4555,63 @@ merge them. This can be done using %</sample.tex> % \end{macrocode} % \begin{macrocode} +%<*sample4col.tex> +% \end{macrocode} +\documentclass[a4paper]{article} + +% start out with 3 column format to make it easier to modify +\usepackage[style=long,cols=3]{glossary} + +% make glossary have 4 columns all left aligned +% (this assumes entries can fit onto a single line +% otherwise use p specifier instead of l) +\renewcommand{\glossaryalignment}{llll} +% Header row +\renewcommand{\glossaryheader}{% +\bfseries Name & \bfseries Description & \bfseries Unit & +\bfseries Page} + +\makeglossary + +\begin{document} + +\printglossary + +The width\glossary{name={$w$},sort=w,description={width&m}}, $w$, is +measured in meters. The +mass\glossary{name={$M$},sort=M,description={mass&kg}}, $M$ is +measured in kilograms. + +\end{document} +% \begin{macrocode} +%</sample4col.tex> +% \end{macrocode} +% \begin{macrocode} %<*sampleAcr.tex> % \end{macrocode} \documentclass[a4paper]{report} \usepackage{xspace} \usepackage[colorlinks,plainpages=false]{hyperref} -\usepackage[style=altlist,toc,number=none]{glossary} +\usepackage[style=altlist,hypertoc,number=none,acronym]{glossary} +%\usepackage[style=long,toc,number=none]{glossary} -\makeglossary +%\makeglossary +\makeacronym -\renewcommand{\acronymfont}[1]{\textmd{\scshape #1}} +%\renewcommand{\acronymfont}[1]{\textmd{\scshape #1}} -\setacronymnamefmt{\gloshort: \expandafter\MakeUppercase\glolong} +%\setacronymnamefmt{\gloshort: \expandafter\MakeUppercase\glolong} +%\setacronymnamefmt{\gloshort} +%\setacronymdescfmt{\expandafter\MakeUppercase\glolong: \glodesc} \newacronym{svm}{support vector machine}{description=Statistical pattern recognition technique~\cite{svm}} -\newacronym[ksvm]{k-svm}{kernel support vector machine}{description=Statistical pattern recognition technique using -the ``kernel trick'' (see also SVM)} +\newacronym[ksvm]{k-svm}{kernel support vector machine}{description={Statistical pattern recognition technique using +the ``kernel trick'' (see also SVM)}} \begin{document} \tableofcontents -\printglossary - \chapter{Support Vector Machines} @@ -4120,6 +4635,9 @@ The \ksvm\ is \ifacronymfirstuse{svm}{a}{an} \svm\ that uses the so called ``ker \bibitem{svm} \ldots \end{thebibliography} +%\printglossary +\printacronym + \end{document} % \begin{macrocode} %</sampleAcr.tex> @@ -4132,13 +4650,15 @@ The \ksvm\ is \ifacronymfirstuse{svm}{a}{an} \svm\ that uses the so called ``ker \usepackage{amsmath} \usepackage[header,border=none,cols=3]{glossary} - \newcommand{\erf}{\operatorname{erf}} \newcommand{\erfc}{\operatorname{erfc}} \renewcommand{\theglossarynum}{\theequation} \renewcommand{\pagecompositor}{.} +% The following will put a blank line between every entry +%\setglossary{delimT={\cr & \cr},gloskip={}} + \renewcommand{\glossaryname}{Index of Special Functions and Notations} \renewcommand{\glossaryheader}{\bfseries Notation & @@ -4573,18 +5093,18 @@ G = 0.915\,965\,594\ldots \usepackage[plainpages=false,colorlinks]{hyperref} \usepackage{html} -\usepackage[toc]{glossary} +%\usepackage{array} +\usepackage[toc,style=long,cols=3]{glossary} \makeglossary -\newglossarytype{notation}{not}{ntn} +\newglossarytype{notation}{not}{ntn}[style=long,cols=2,border,header] % Set up notation style \newcommand{\notationname}{Notation} % Don't display numbers, remove commas and number hyphens % for notation entries -\setglossary{type=notation,glsnumformat=ignore,% -glodelim={.}} +%\setglossary{type=notation,glsnumformat=ignore,glodelim={.}} \makenotation diff --git a/Master/texmf-dist/source/latex/glossary/glossary.ins b/Master/texmf-dist/source/latex/glossary/glossary.ins index f67fe529aa4..1091023f1c1 100644 --- a/Master/texmf-dist/source/latex/glossary/glossary.ins +++ b/Master/texmf-dist/source/latex/glossary/glossary.ins @@ -1,8 +1,8 @@ -% glossary.ins generated using makedtx version 0.9b 2005/9/27 12:20 +% glossary.ins generated using /nlctltpc/home/nlct/bin/makedtx version 0.9b 2006/7/9 16:01 \input docstrip \preamble -Copyright (C) 2005 Nicola Talbot, all rights reserved. +Copyright (C) 2006 Nicola Talbot, all rights reserved. If you modify this file, you must change its name first. You are NOT ALLOWED to distribute this file alone. You are NOT ALLOWED to take money for the distribution or use of either this @@ -27,6 +27,8 @@ etc. \file{glossary.perl}{\nopreamble\nopostamble\from{glossary.dtx}{glossary.perl}} \file{glossary.sty}{\usepreamble\defaultpreamble \usepostamble\defaultpostamble\from{glossary.dtx}{glossary.sty,package}} +\file{sample4col.tex}{\usepreamble\defaultpreamble +\usepostamble\defaultpostamble\from{glossary.dtx}{sample4col.tex,package}} \file{sampleAcr.tex}{\usepreamble\defaultpreamble \usepostamble\defaultpostamble\from{glossary.dtx}{sampleAcr.tex,package}} \file{sampleEq.tex}{\usepreamble\defaultpreamble |