Is there a program for managing glossary tags?
As there currently does not exist such tool and it seems many users want to have such a tool, I decided to integrate this into JabRef as a feature. The idea is to have a similar, but more advanced functionality like for managing journal abbrevations in JabRef.
Therefore I have created an issue to track the development. https://github.com/JabRef/jabref/issues/2366
I will probably start around Christmas with the development.
(Answer rewritten following release of bib2gls
v1.0.)
There's a new command line application called bib2gls
that can be used to convert .bib
files to a format that can be input using glossaries-extra
's \GlsXtrLoadResources
command. The record
package option is required. The application requires at least Java 7, although newer versions are recommended (Java 7 has reached its end of life and is now deprecated). It also needs at least v1.12 of glossaries-extra
, but works better with the latest version.
The application performs two functions in one:
- fetches the information from the
.bib
file(s) according to the information found in the.aux
file (likebibtex
); - performs hierarchical sorting and collates locations (like
makeindex
orxindy
).
This means you can use JabRef to manage the entries. Unlike makeindex
, xindy
and bibtex
, the file created by bib2gls
isn't the formatted list but the entry definitions provided in the order obtained from sorting. Only those entries that were selected from the .bib
file are defined and since they have been defined in the appropriate order, the glossary can simply be displayed using \printunsrtglossary
(or \printunsrtglossaries
), which is provided by glossaries-extra
.
The record
package option automatically switches on undefaction=warn
, which means that if you try to reference (with \gls
etc) an undefined entry then you just get a warning instead of an error. On the first LaTeX run the entries aren't defined (as with \cite
). This means that iterative commands like \glsaddall
don't work. Instead you can use selection=all
in the options of \GlsXtrLoadResources
.
If you already have existing .tex
files containing all your entry definitions (that's loaded with \input
or \loadglsentries
) then you can use the supplementary application convertgls2bib
to convert it to a .bib
file for use with bib2gls
. For example, suppose entries.tex
contains:
\newglossaryentry{sample}{name={sample},description={an example}}
\newabbreviation{html}{HTML}{Hypertext Markup Language}
\newterm[plural=geese]{goose}
\newterm[see={[\seealsoname]goose}]{duck}
then
convertgls2bib entries.tex entries.bib
will create the file entries.bib
that contains:
% Encoding: UTF-8
@entry{sample,
name = {sample},
description = {an example}
}
@abbreviation{html,
short = {HTML},
long = {Hypertext Markup Language}
}
@index{goose,
plural = {geese}
}
@index{duck,
seealso = {goose}
}
The .bib
encoding can be changed using --bibenc
<encoding> and the .tex
encoding can be specified using --texenc
<encoding>. For example:
convertgls2bib --texenc UTF-8 --bibenc UTF-8 entries.tex entries.bib
The .bib
format doesn't permit spaces in labels so you can use --space-sub
<replacement> to replace spaces with <replacement>. For example:
convertgls2bib --space-sub '-' entries.tex entries.bib
or
convertgls2bib --space-sub '' entries.tex entries.bib
Remember that you'll need to make the relevant changes in your \gls
etc argument to reflect this substitution.
bib2gls
has a primitive LaTeX interpreter to allow it to deduce the sort
value if omitted. If you use @preamble
to provide commands, bib2gls
will try to add them to the interpreter's list of known commands. You can store the @preamble
code in separate .bib
files if the provided commands are used in entries defined in multiple .bib
files. It may be that you don't want the interpreter to pick up some command definitions, so you could divide the @preamble
up into two files, say glossdefs-interpret.bib
and glossdefs-nointerpret.bib
.
For example, suppose I need:
\providecommand{\strong}[1]{\textbf{\color{red}#1}}
\providecommand{\swap}[2]{#2 (#1)}
and suppose I start with just one .bib
file called entries.bib
:
@preamble{"\providecommand{\strong}[1]{\textbf{\color{red}#1}}
\providecommand{\swap}[2]{#2 (#1)}"}
@index{example,
name={\strong{\swap{stuff}{example}}}
}
@index{sample}
@index{test}
@index{foo}
@index{bar}
Here's the test document test.tex
:
\documentclass{article}
\usepackage{color}
\usepackage[record,style=indexgroup]{glossaries-extra}
\GlsXtrLoadResources[src={entries},selection=all]
% adjust indexgroup style:
\renewcommand{\glstreenamefmt}[1]{#1}
\renewcommand{\glstreegroupheaderfmt}[1]{\textbf{#1}}
\begin{document}
\printunsrtglossaries
\end{document}
The build process is:
pdflatex test
bib2gls --group test
pdflatex test
(The --group
switch is needed because I'm using a glossary style that has letter groups.) The result looks like:
Inspecting test.glstex
(the file created by bib2gls
) shows that the sort
value for example
is
sort={redexample (stuff)}
This is because bib2gls
has picked up the definitions of both \strong
and \swap
from @preamble
, so it expands
\strong{\test{stuff}{example}
to
\textbf{\color{red}example (stuff)}
and then ignores \textbf
and \color
leaving redexample (stuff)
, which is why the example
entry ends up in the R letter group.
I can use interpret-preamble=false
to prevent bib2gls
from trying to interpret the contents of @preamble
(it will just write the contents to the .glstex
file):
\GlsXtrLoadResources[
src={entries},% definitions are in entries.bib
selection=all,% select all entries
interpret-preamble=false% don't interpret @preamble
]
Now the document looks like:
Inspecting the .glstex
file shows that the sort
value for example
has been set as:
sort={stuffexample}
This is because bib2gls
now doesn't recognise \strong
or \swap
so it interprets \strong{\test{stuff}{example}}
as simply stuffexample
, which is why example
now ends up in the S letter group. What's needed is for bib2gls
to pick up the definition of \swap
but not \strong
, so I need to create the file glossdefs-nointerpret.bib
that contains:
@preamble{"\providecommand{\strong}[1]{\textbf{\color{red}#1}}"}
and glossdefs-interpret.bib
that contains:
@preamble{"\providecommand{\swap}[2]{#2 (#1)}"}
The document is now:
\documentclass{article}
\usepackage{color}
\usepackage[record,style=indexgroup]{glossaries-extra}
\GlsXtrLoadResources[src={glossdefs-nointerpret},interpret-preamble=false]
\GlsXtrLoadResources[src={glossdefs-interpret,entries},selection=all]
% adjust indexgroup style:
\renewcommand{\glstreenamefmt}[1]{#1}
\renewcommand{\glstreegroupheaderfmt}[1]{\textbf{#1}}
\begin{document}
\printunsrtglossaries
\end{document}
which now results in:
You can have multiple \GlsXtrLoadResources
. Any definitions found in @preamble
will be remembered for the next resource set so the above can also be:
\documentclass{article}
\usepackage{color}
\usepackage[record,style=indexgroup]{glossaries-extra}
\GlsXtrLoadResources[src={glossdefs-nointerpret},interpret-preamble=false]
\GlsXtrLoadResources[src={glossdefs-interpret}]
\GlsXtrLoadResources[src={entries},selection=all]
% adjust indexgroup style:
\renewcommand{\glstreenamefmt}[1]{#1}
\renewcommand{\glstreegroupheaderfmt}[1]{\textbf{#1}}
\begin{document}
\printunsrtglossaries
\end{document}
You can have multiple .bib
files listed in src
, in which case they'll all be sorted together. Each \GlsXtrResources
set is sorted independently of the other sets. Suppose testfile1.bib
contains:
@index{duck}
@index{zebra}
@index{aardvark}
and testfile2.bib
contains:
@index{caterpillar}
@index{bee}
@index{wombat}
and test.tex
contains:
\documentclass{article}
\usepackage[record,style=indexgroup]{glossaries-extra}
\GlsXtrLoadResources[src={testfile1,testfile2},selection=all]
% adjust indexgroup style:
\renewcommand{\glstreenamefmt}[1]{#1}
\renewcommand{\glstreegroupheaderfmt}[1]{\textbf{#1}}
\begin{document}
\printunsrtglossaries
\end{document}
then the result is
However, if I load the .bib
files using two separate resource commands:
\documentclass{article}
\usepackage[record,style=indexgroup]{glossaries-extra}
\GlsXtrLoadResources[src={testfile1},selection=all]
\GlsXtrLoadResources[src={testfile2},selection=all]
% adjust indexgroup style:
\renewcommand{\glstreenamefmt}[1]{#1}
\renewcommand{\glstreegroupheaderfmt}[1]{\textbf{#1}}
\begin{document}
\printunsrtglossaries
\end{document}
then the result is a bit weird:
but I can make use of this to alter the normal letter grouping:
\documentclass{article}
\usepackage[record,style=indexgroup]{glossaries-extra}
\GlsXtrLoadResources[src={testfile1},
group={Group 1},
selection=all]
\GlsXtrLoadResources[src={testfile2},
sort={letter-nocase-reverse},
group={Group 2},
selection=all]
% adjust indexgroup style:
\renewcommand{\glstreenamefmt}[1]{#1}
\renewcommand{\glstreegroupheaderfmt}[1]{\textbf{#1}}
\begin{document}
\printunsrtglossaries
\end{document}
(For illustrative purposes, I've sorted the second set differently.) This produces:
If you have any abbreviations you need to set the abbreviation style before the resource command. For example, suppose entries-abbrv.bib
contains:
@string{ssi={server-side includes}}
@string{html={hypertext markup language}}
@abbreviation{shtml,
short="shtml",
long= ssi # " enabled " # html,
description={a combination of \gls{html} and \gls{ssi}},
seealso={html,ssi}
}
@abbreviation{html,
short ="html",
long = html,
description={a markup language for creating web pages}
}
@abbreviation{ssi,
short="ssi",
long = ssi,
description={a simple interpreted server-side scripting language}
}
and test.tex
contains:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[record,style=indexgroup]{glossaries-extra}
\setabbreviationstyle{long-short-sc-desc}
\GlsXtrLoadResources[src={entries-abbrv}]
\begin{document}
First use: \gls{shtml}. Next use: \gls{shtml}.
\printunsrtglossaries
\end{document}
Note that although shtml
has been used in the document, the dependent entries html
and ssi
are automatically selected. The build process is still:
pdflatex test
bib2gls --group test
pdflatex test
This is different to makeglossaries
which requires an extra makeglossaries
and pdflatex
to index the dependents. However the corresponding locations aren't picked up until a subsequent bib2gls
and pdflatex
call. Then the result looks like:
I can suppress the indexing in the glossary by changing the format to glsignore
, which bib2gls
recognises as a special ignored location:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[record,style=indexgroup]{glossaries-extra}
\setabbreviationstyle{long-short-sc-desc}
\GlsXtrLoadResources[src={entries-abbrv}]
\begin{document}
First use: \gls{shtml}. Next use: \gls{shtml}.
\GlsXtrSetDefaultNumberFormat{glsignore}
\printunsrtglossaries
\end{document}
If I want to use the long-short-sc
style instead I can tell bib2gls
to ignore the description
field provided in the .bib
file:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[record,style=indexgroup]{glossaries-extra}
\setabbreviationstyle{long-short-sc}
\GlsXtrLoadResources[src={entries-abbrv},
ignore-fields={description}]
\begin{document}
First use: \gls{shtml}. Next use: \gls{shtml}.
\printunsrtglossaries
\end{document}
This produces:
If I change my mind and decide I actually want normal upper case short forms instead of using \textsc
I can tell bib2gls
to change the case of the short
field:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[record,style=indexgroup]{glossaries-extra}
\setabbreviationstyle{long-short}
\GlsXtrLoadResources[src={entries-abbrv},
short-case-change={uc},
ignore-fields={description}]
\begin{document}
First use: \gls{shtml}. Next use: \gls{shtml}.
\printunsrtglossaries
\end{document}
This produces:
Now let's suppose I've been using the \newdualentry
example command described in the glossaries
manual. The closest matching entry type is @dualentryabbreviation
, so I'm going to change entries-abbrv.bib
to use that instead of @abbreviation
:
@string{ssi={server-side includes}}
@string{html={hypertext markup language}}
@dualentryabbreviation{shtml,
short="shtml",
long= ssi # " enabled " # html,
description={a combination of \gls{html} and \gls{ssi}},
seealso={html,ssi}
}
@dualentryabbreviation{html,
short ="html",
long = html,
description={a markup language for creating web pages}
}
@dualentryabbreviation{ssi,
short="ssi",
long = ssi,
description={a simple interpreted server-side scripting language}
}
The document needs the abbreviations
package option, otherwise all the terms and abbreviations will end up in the main
glossary:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[record,abbreviations,style=indexgroup]{glossaries-extra}
\setabbreviationstyle{long-short-sc}
\GlsXtrLoadResources[src={entries-abbrv}]
\begin{document}
First use: \gls{shtml}. Next use: \gls{shtml}.
\printunsrtglossaries
\end{document}
This produces:
Here's an example of a hierarchical index. The file entries.bib
contains:
@index{birds}
@index{duck,parent={birds}}
@index{goose,plural={geese},parent={birds}}
@index{swan,parent={birds}}
@index{chicken,parent={birds}}
@index{vegetable}
@index{cabbage,parent={vegetable}}
@index{minerals}
@index{quartz,parent={minerals}}
@index{corundum,parent={minerals}}
@index{amber,parent={minerals}}
@index{gypsum,parent={minerals}}
@index{aardvark}
@index{bard}
@index{buzz}
@index{item}
@index{subitem,parent={item}}
@index{subsubitem,parent={subitem}}
@index{parentid,name={parent name}}
@entry{child,parent={parentid},description={an example}}
The file test.tex
contains:
\documentclass{article}
\usepackage[record,stylemods={mcols},style=mcolindexgroup]{glossaries-extra}
\GlsXtrLoadResources[src={entries.bib}]
% adjust mcolindexgroup style:
\renewcommand{\glstreenamefmt}[1]{#1}
\renewcommand{\glstreegroupheaderfmt}[1]{\textbf{#1}}
\begin{document}
\gls{duck}.
\gls{quartz}, \gls{corundum}, \gls{amber}.
\gls{aardvark}, \gls{bard}, \gls{buzz}.
\gls{vegetable}, \gls{cabbage}.
\gls{subsubitem}.
\gls{child}.
\printunsrtglossaries
\end{document}
The resulting document looks like:
The duck's siblings haven't been selected, so the duck entry looks a little lonely. We can neaten the list by flattening the duck, which involves adjusting the name
, text
and parent
to shift it up one hierarchical level. The parent bird
entry is then no longer required and can be removed.
\documentclass{article}
\usepackage[record,stylemods={mcols},style=mcolindexgroup]{glossaries-extra}
\GlsXtrLoadResources[src={entries.bib},
flatten-lonely=postsort% flatten lonely children
]
% adjust mcolindexgroup style:
\renewcommand{\glstreenamefmt}[1]{#1}
\renewcommand{\glstreegroupheaderfmt}[1]{\textbf{#1}}
\begin{document}
\gls{duck}.
\gls{quartz}, \gls{corundum}, \gls{amber}.
\gls{aardvark}, \gls{bard}, \gls{buzz}.
\gls{vegetable}, \gls{cabbage}.
\gls{subsubitem}.
\gls{child}.
\printunsrtglossaries
\end{document}
This now produces:
The duck has now been flattened but not the cabbage. This is because the parent entry (vegetable) has been indexed in the document, so it can't be removed. The cabbage can be flattened by changing the flatten lonely rule but its parent still can't be removed:
\documentclass{article}
\usepackage[record,stylemods={mcols},style=mcolindexgroup]{glossaries-extra}
\GlsXtrLoadResources[src={entries.bib},
flatten-lonely=postsort,% flatten lonely children
flatten-lonely-rule=discard unrecorded
]
% adjust mcolindexgroup style:
\renewcommand{\glstreenamefmt}[1]{#1}
\renewcommand{\glstreegroupheaderfmt}[1]{\textbf{#1}}
\begin{document}
\gls{duck}.
\gls{quartz}, \gls{corundum}, \gls{amber}.
\gls{aardvark}, \gls{bard}, \gls{buzz}.
\gls{vegetable}, \gls{cabbage}.
\gls{subsubitem}.
\gls{child}.
\printunsrtglossaries
\end{document}
The result is:
The bib2gls
user manual contains a full description of all entry types, but here's a summary:
@entry
required fields:description
andname
orparent
. Ifname
is omitted it's obtained from the parent name. Ifsort
is omitted it's obtained fromname
.@symbol
required fields:name
orparent
. Ifname
is omitteddescription
is also required and thename
is obtained from the parent name. Ifsort
is omitted it's obtained from the entry's label.@number
as@symbol
@index
no required fields. Ifname
is omitted it's taken from the entry's label. Ifsort
is omitted it's obtained from thename
.@abbreviation
required fields:long
andshort
. Ifsort
is omitted it's taken from theshort
field.@acronym
as@abbreviation
@dualentry
required fields:name
anddescription
. Ifsort
is omitted it's taken fromname
. This also creates a corresponding entry with the labeldual.
label that has thename
anddescription
flipped.@dualentryabbreviation
required fields:short
,long
,description
. The primary entry is an abbreviation (sorted according toshort
) and the dual entry is a regular term (sorted according tolong
).@dualsymbol
required fields:name
andsymbol
. This creates a corresponding entry with the labeldual.
label that has thename
andsymbol
flipped.@dualnumber
as@dualsymbol
@dualabbreviation
required fields:short
,long
,dualshort
andduallong
. This creates a corresponding abbreviation with the labeldual.
label that has theshort
anddualshort
flipped andlong
andduallong
flipped.@dualacronym
as@dualabbreviation
The base glossaries
package provides the fields: name
, description
, parent
, descriptionplural
, text
, first
, plural
, firstplural
, symbol
, symbolplural
, sort
, type
, user1
, user2
, user3
, user4
, user5
, user6
, nonumberlist
, see
, short
, shortplural
, long
and longplural
and (if \makenoidxglossaries
) loclist
.
For the .bib
file it's best to avoid sort
, type
and nonumberlist
. There's greater flexibility with the \GlsXtrLoadResources
options. Don't set loclist
as it's a private field with its own custom format.
The extension package provides additional fields: category
, alias
, seealso
and (if the record
option is used) group
.
In addition bib2gls
recognises the fields: dualshort
, dualshortplural
, duallong
, duallongplural
, dualplural
. It also provides fields for its own private use (so don't use these in the bib
file, but you can access them in the document when provided): location
, dual
, childcount
.
The glossaries-accsupp
package (\usepackage[accsupp]{glossaries-extra}
) provides: access
, textaccess
, firstaccess
, pluralaccess
, firstpluralaccess
, symbolaccess
, symbolpluralaccess
, descriptionaccess
, descriptionpluralaccess
, longaccess
, shortaccess
, longpluralaccess
, shortpluralaccess
.
The glossaries-prefix
package provides: prefix
, prefixplural
, prefixfirst
and prefixfirstplural
.
If you provide your own fields using commands like \glsaddkey
, put the definition before the first instance of \GlsXtrLoadResources
.
I'm posting this answer since all this information is hard to fit in a comment.
To sum up the comments: It seems such software does not exist. It should either be developed, or an existing bibtex managing software, such as Jabref, can be tweaked to handle *.tex files containing glossaries definitions. @Christoph S of the Jabref dev team has shown his willingness to hear more, so here's a brief explanation:
The glossaries file has a somewhat resemblence to a bib file, where instead of bibliographical entries, the glossaries *.tex file contains glossaries entries. The definitions of glossaries (that can replace the entry type in bibtex, i.e. @misc) are:
\newglossaryentry
\longnewglossaryentry
\newacronym
\newterm
\newabbrevation
\glsxtrnewsymbol
\glsxtrnewnumber
The fields that a glossary entry can have are
name
description
parent
descriptionplural
text
first
plural
firstplural
symbol
symbolplural
sort
type
user1,...,user6
nonumberlist
see
A glossary managing GUI would have to be able to read these fields, manage entries and produce new ones.
Here is a glossaries sample file compiled from several sample files provided by the glossaries package
% This is a sample file, it was produced from the glossaries package sample files.
% The following definition of glossaries are typical and are used by most users,
% they are covered by the beginners guide, and are simple
\newglossaryentry{Perl}{name=\texttt{Perl},
sort=Perl, % need a sort key because name contains a command
description=A scripting language}
\newglossaryentry{glossary}{name=glossary,
description={\nopostdesc},
plural={glossaries}}
\newglossaryentry{glossarycol}{
description={collection of glosses},
sort={2},
parent={glossary}}
\newglossaryentry{glossarylist}{
description={list of technical words},
sort={1},
parent={glossary}}
\newglossaryentry{pagelist}{name=page list,
% description value has to be enclosed in braces
% because it contains commas
description={a list of individual pages or page ranges
(e.g.\ 1,2,4,7-9)}}
\newglossaryentry{mtrx}{name=matrix,
description={rectangular array of quantities},
% plural is not simply obtained by appending an s, so specify
plural=matrices}
% entry with a paragraph break in the description
\newglossaryentry{par}{name=paragraph,
description={distinct section of piece of
writing.\glspar Beginning on new, usually indented, line}}
% entry with two types of plural. Set the plural form to the
% form most likely to be used. If you want to use a different
% plural, you will need to explicity specify it in \glslink
\newglossaryentry{cow}{name=cow,
% this isn't necessary, as this form (appending an s) is
% the default
plural=cows,
% description:
description={(\emph{pl.}\ cows, \emph{archaic} kine) an adult
female of any bovine animal}}
\newglossaryentry{bravo}{name={bravo},
description={\nopostdesc}}
\newglossaryentry{bravo1}{description={cry of approval (pl.\ bravos)},
sort={1},
plural={bravos},
parent=bravo}
\newglossaryentry{bravo2}{description={hired ruffian or killer (pl.\ bravoes)},
sort={2},
plural={bravoes},
parent=bravo}
\newglossaryentry{seal}{%
name=seal,%
description={sea mammal with flippers that eats fish}
}
\newglossaryentry{sealion}{%
name={sea lion},%
description={large seal}%
}
\newglossaryentry{M}{name={$M$},
sort=M,
description={mass},
symbol=kg}
\newglossaryentry{svm}{
% how the entry name should appear in the glossary
name={Support vector machine (SVM)},
% how the description should appear in the glossary
description={Statistical pattern recognition
technique~\cite{svm}},
% how the entry should appear in the document text
text={svm},
% how the entry should appear the first time it is
% used in the document text
first={support vector machine (svm)}}
\newglossaryentry{ksvm}{
name={Kernel support vector machine (KSVM)},
description={Statistical pattern recognition technique
using the ``kernel trick'' (see also SVM)},
text={ksvm},
first={kernel support vector machine}}
\newglossaryentry{ident}{name=identity matrix,
description=diagonal matrix with 1s along the leading diagonal,
plural=identity matrices}
% These are special characters or protected characters. glossaries knows how to handle these.
\newglossaryentry{quote}{name={"},
description={the double quote symbol}}
\newglossaryentry{at}{name={@},
description={the ``at'' symbol}}
\newglossaryentry{excl}{name={!},
description={the exclamation mark symbol}}
\newglossaryentry{bar}{name={\ensuremath{|}},
description={the vertical bar symbol}}
\newglossaryentry{hash}{name={\#},
description={the hash symbol}}
\newglossaryentry{emigre}{%
name={{é}migré},
description={person who has emigrated to another country,
especially for political reasons}
}
\newglossaryentry{not:set}{type=notation, % glossary type
name={$\mathcal{S}$},
description={A set},
sort={S}}
%If one wants to use \gls call in a formula, he'd used the \ensuremath command
\newglossaryentry{Gamma}{name=\ensuremath{\Gamma(z)},
description=Gamma function,
sort=Gamma}
\newglossaryentry{Phi}{name={\ensuremath{\Phi(\alpha,\gamma;z)}},
description=confluent hypergeometric function,sort=Pagz}
\newglossaryentry{knu}{name=\ensuremath{k_\nu(x)},
description=Bateman's function,sort=kv}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% typical acronym definitions
%the typical definition of an acronym is this, that is not quite similar to the name={field}... This could pose a challange for tweaking a program such as jabref...
\newacronym{svm1}% label
{svm1}% abbreviation
{support vector machine one}% long form
\newacronym{laser}{laser}{light amplification by stimulated
emission of radiation}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% These are samples I found in the samples provided by the glossaries package.
%%% They are more complex and are covered in the long detailed users guide
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\longnewglossaryentry{par1}{name={par1}}%
{%
A long description with a paragraph break.
This is the next paragraph.
% non-standard definition of an acronym - never used anything like that either
% This contrived acronym has non-standard plural forms.
% These are specified in the optional argument.
% Remove the optional argument to revert to the default
% plurals.
\newacronym[\glsshortpluralkey=cas,\glslongpluralkey=contrived
acronyms]{aca}{aca}{a contrived acronym}
\newacronym[description={a device that emits a narrow beam of
light}]{laser}{laser}{light amplification by stimulated
emission of radiation}
\newacronym[shortaccess=S V M]{svm}{svm}{support vector machine}
\newacronym[type=main]{vc}{VC}{Vector Calculus}
\newglossaryentry{pear}{name=pear,
description={an oddly shaped fruit}}
\newglossaryentry{apple}{name=apple,
description={firm, round fruit},
see=[see also]{pear}}
\newglossaryentry{banana}{name=banana,
description={a yellow fruit with an even odder shape than
a \gls{pear}}}
\newglossaryentry{fruit}{name=fruit,
description={sweet, fleshy product of plant containing seed}}
\glssee{fruit}{pear,apple,banana}
\newabbr{eg}{e.g.}{exempli gratia}
\newabbr{ie}{i.e.}{id est}
\newabbr{bsc}{B.Sc.}{Bachelor of Science}
\newdualentry{svm}% label
{SVM}% abbreviation
{support vector machine}% long form
{Statistical pattern recognition technique}% description
\newglossaryentry{sample}{name={sample},
description={an example},
prefix={a~},
prefixplural={the\space}%
}
\newglossaryentry{oeil}{name={oeil},
plural={yeux},
description={eye},
prefix={l'},
prefixplural={les\space}}
%these are samples with custome fields (or keys), that is ed and ing are defined in the preamble of tex file and then these are defined. I would not expect a managing program to have a preamble for custom definitions, however, being able to produce custom
\newglossaryentry{run}{name={run},%
ed={ran},%
ing={running},
description={}}
\newglossaryentry{waddle}{name={waddle},%
ed={waddled},%
ing={waddling},%
description={}}
The greatest challange that I see is the definition of a new acronym: It does not adhere to the typical structure of entry definition in bibtex.
as to @Nicola Talbot's concern with custom fields, Jabref has an option of editing an entry bib source, there one could add a custom bib field, the same can be done in the glossaries.