Несколько глоссариев смешивают записи: дубликаты во втором глоссарии

Несколько глоссариев смешивают записи: дубликаты во втором глоссарии

Я пишу отчет, содержащий как список констант, так и список символов, оба из которых определены с помощьюглоссарииpackage. Проблема в том, что второй список (в данном случае константы) содержит не только элементы, которые он должен содержать, но и элементы из первого списка (символы): Список констант теперь содержит как константы, так и символы.

Эта проблема возникает независимо от порядка (если их поменять местами, список символов также будет содержать константы). Я думаю, что мне нужно вызвать какую-то команду сброса глоссария между их печатью, но я не могу ее нигде найти. Кто-нибудь знает, что вызывает эту проблему?

Я использую дистрибутив TeXLive-full, который идет с Ubuntu 16.04. Версия пакета Glossaries согласно \listfiles: glossaries.sty 2017/01/19 v4.29

Я подготовил MWE. Обратите внимание, что я включил только 1 стиль глоссария, тогда как на самом деле у меня были бы отдельные стили для списка констант и символов. Это просто для того, чтобы MWE был небольшим. Проблема также возникает с отдельными стилями. Вот файл main.tex:

\documentclass[12pt,a4paper]{article}

\usepackage{glossaries}

%%%%%%% Load the preamble that contains the glossary styles
\input{./Helpers/glspreamble}

%%%%%%% Define entries for the list of acronyms, constants and symbols
\newglossaryentry{con:g}
{
    type=constants, % entry should be in the list of constants!
    name={\ensuremath{g}}, % Put the symbol here in dollar signs
    description={Local gravitational acceleration}, % A brief description of this entry (to appear in the glossary).
    user1={\ensuremath{9.81}},
    symbol={\ensuremath{\frac{m}{s^2}}}, % put the unit here
    sort=g, % for correct sorting type the full name of the symbol here
    parent=romanletter % for sorting purposes, use romanletter or greekletter
}

\newglossaryentry{sym:t}
{
    type=symbol, % entry should be in the list of symbols!
    name={\ensuremath{t}}, % Put the symbol here in dollar signs
    description={Time}, % A brief description of this entry (to appear in the glossary).
    user1={\ensuremath{-}},
    symbol={\ensuremath{s}}, % put the unit here
    sort=t, % for correct sorting type the full name of the symbol here
    parent=romanletter % for sorting purposes, use romanletter or greekletter
}

\begin{document}

%%%%%%% Print the glossaries
\printnoidxglossary[type=symbol,nonumberlist,style=listoc]

%%%%%%% ----> What should I do here to reset the glossary entries?
\printnoidxglossary[type=constants,nonumberlist,style=listoc]

%%%%%%% Reference an element from every glossary
Reference symbol: \gls{sym:t} \gls{sym:t}\\
Reference constant: \gls{con:g} \gls{con:g}

\end{document}

А это файл glspreamble.tex, который определяет стили глоссария (обычно он содержит отдельный стиль для списка символов, поскольку они не имеют значения)

% Generate the glossary 
    % create a new glossary style for the list of constants
        % Adapted from http://www.latex-community.org/forum/viewtopic.php?f=5&t=20797
        \newglossarystyle{listoc}{%
        % \glossarystyle{altlongragged4col}
        \setlength{\glsdescwidth}{0.8\textwidth}
        % allow line wrap in the description column
        \renewenvironment{theglossary}%
            {\begin{longtable}{lllp{\glsdescwidth}}}%
            {\end{longtable}}%
        \renewcommand{\glsgroupskip}{}% make nothing happen between groups
        \renewcommand*{\glossaryheader}{%
        \bfseries Symbol & \bfseries Value & \bfseries Unit & \bfseries Description \\\endhead}%
        % No heading between groups:
        \renewcommand*{\glsgroupheading}[1]{}%
        % Main (level 0) entries displayed in a row optionally numbered:
        \renewcommand*{\glossentry}[2]{%
        \glsentryitem{##1}% Entry number if required
        \glstarget{##1}{\glossentryname{##1}}% Name
            & \glsentryuseri{##2}% Value
            & \glossentrysymbol{##2}% Unit
            & \glossentrydesc{##2}% Description
            \tabularnewline % end of row
        }%
        % Similarly for sub-entries (no sub-entry numbers):
        \renewcommand*{\subglossentry}[3]{%
        % ignoring first argument (sub-level)
        \glstarget{##2}{\glossentryname{##2}}% Name
            & \glsentryuseri{##2}% Value
            & \glossentrysymbol{##2}% Unit
            & \glossentrydesc{##2}% Description
            \tabularnewline % end of row
            }%
            % Nothing between groups:
            \renewcommand*{\glsgroupskip}{}%
            }

\newglossary[symbol-glg]{symbol}{symbol-gls}{symbol-glo}{List of Symbols}
\newglossary[constants-glg]{constants}{constants-gls}{constants-glo}{List of Constants}
\makenoidxglossaries
\newglossaryentry{romanletter}{type=symbol,name={},description={\nopostdesc},sort=a}
\newglossaryentry{greekletter}{type=symbol,name={},description={\nopostdesc},sort=b}
\newglossaryentry{romanletterc}{type=constants,name={},description={\nopostdesc},sort=a}
\newglossaryentry{greekletterc}{type=constants,name={},description={\nopostdesc},sort=b}

решение1

Вы назначили запись в одном глоссарии родительской записи в другом глоссарии. Таким образом romanlettersymbolглоссарии) есть дочерняя запись sym:tв symbolглоссарии и дочерняя запись con:gв constantsглоссарии. Дочерняя запись con:gвызывает добавление своей родительской записи в ее собственный глоссарий, но это также вызывает добавление romanletterвсех других дочерних записей родителя ( в данном случае).sym:t

Я подозреваю, что это на самом деле просто опечатка, и родительским элементом для con:gна самом деле должен быть romanletterc.

\newglossaryentry{con:g}
{
    type=constants, 
    name={\ensuremath{g}}, 
    description={Local gravitational acceleration},
    user1={\ensuremath{9.81}},
    symbol={\ensuremath{\frac{m}{s^2}}},
    sort=g,
    parent=romanletterc % <--- correction
}

Эта коррекция дает желаемый результат.

изображение документа

Связанный контент