Я хотел бы создать документ, в котором записи глоссария находятся на каждой странице в сносках, и мне удалось это сделать (см. MWE ниже), но я хотел бы, чтобы глоссы сносок были отсортированы в алфавитном порядке, но я не смог найти способ сортировать сноски. И наоборот, есть ли глоссарий на каждой странице?
МВЭ:
\documentclass{book}
\usepackage[nonumberlist]{glossaries}
\usepackage{xifthen}
\usepackage{everypage}
\makeglossaries
% enable counting the words
\glsenableentrycount
% reset counts every page
\AddEverypageHook{\glsresetall}
% populate some entries
\newglossaryentry{uno}{name=uno,description=one}
\newglossaryentry{dos}{name=dos,description=two}
\newglossaryentry{tres}{name=tres,description=three}
\newglossaryentry{quatro}{name=quatro,description=four}
\newglossaryentry{cinco}{name=cinco,description=five}
% displaying glossary entries
\newcommand\glossdisplay[2]{%
\ifthenelse{\glsentrycurrcount{\glslabel} = 0}{%
% first time we've seen this word on this page so add a footnote
#1\let\thefootnote\relax\footnote{\textbf{\glslabel} #2}%
}{%
% not the first definition on this page so just display the word
#1%
}%
}
\renewcommand\glsdisplayfirst[4]{\glossdisplay{#1}{#2}}
\renewcommand\glsdisplay[4]{\glossdisplay{#1}{#2}}
\newcommand\gloss[2][\relax]{\glsdisp{#1}{#2}}
\begin{document}
Counting to three in Spanish, \gloss[uno]{uno}, \gloss[dos]{dos}, \gloss[tres]{tres}.
Counting to five in Spanish, \gloss[uno]{uno}, \gloss[dos]{dos}, \gloss[tres]{tres}, \gloss[quatro]{quatro}, \gloss[cinco]{cinco}.\\
Notice how \gloss[uno]{uno}, \gloss[dos]{dos}, and \gloss[tres]{tres} only appear once in the footnotes despite being glossed three times.
Now the real question: \textit{How do I sort the per-page glossary alphabetically?} Perhaps there is a per-page option for the glossaries package?
\end{document}
В созданном документе записи сносок/глоссария сортируются
- уно
- дос
- трес
- куатро
- синко
но я хотел бы увидеть
- синко
- дос
- куатро
- трес
- уно
Также, если это поможет, я создал документ с помощью:
pdflatex repro.tex
makeindex -s repro.ist -o repro.gls repro.glo
pdflatex repro.tex
решение1
Это самое близкое, что мне удалось получить. Я использовалglossaries-extra
что расширяет glossaries
пакет и обеспечивает подсчет по единицам в дополнение к glossaries
подсчету по всему документу пакета. Это упрощает подсчет по страницам.
\documentclass{book}
\usepackage{everypage}
\usepackage{glossaries-extra}
\AddEverypageHook{%
\gdef\entrylabellist{}%
}
\GlsXtrEnableEntryUnitCounting{general}{0}{page}
\newcommand*{\entrylabellist}{}
\makeatletter
\def\@glo@sortinghandler{\@glo@sorthandler@word}%
\newcommand*{\sortpageentries}{%
\forglsentries{\thisentry}{%
\ifnum\glsentryprevcount{\thisentry}>0\relax
\expandafter\@glo@sortedinsert\expandafter\entrylabellist\expandafter
{\thisentry}%
\fi
}%
}
\newcommand*{\glsxtrpostlinkgeneral}{%
\ifnum\glsentrycurrcount{\glslabel}=1\relax
\footnotemark[1]%
\ifdefempty\entrylabellist
{%
\sortpageentries
\footnotetext[1]{\@for\thisentry:=\entrylabellist\do{%
\glsentryname{\thisentry} \glsentrydesc{\thisentry}. }}%
}%
{}%
\fi
}
\makeatother
\newglossaryentry{uno}{name=uno,description=one}
\newglossaryentry{dos}{name=dos,description=two}
\newglossaryentry{tres}{name=tres,description=three}
\newglossaryentry{quatro}{name=quatro,description=four}
\newglossaryentry{cinco}{name=cinco,description=five}
\begin{document}
Counting to three in Spanish, \gls{uno}, \gls{dos},
\gls{tres}. Counting to five in Spanish, \gls{uno},
\gls{dos}, \gls{tres}, \gls{quatro}, \gls{cinco}.
Notice how \gls{uno}, \gls{dos}, and \gls{tres} only appear once in
the footnotes despite being glossed three times.
\newpage
Test next page.
\gls{tres}, \gls{quatro} and \gls{cinco}.
And again:
\gls{tres}, \gls{quatro} and \gls{cinco}.
\end{document}
Для этого требуется два запуска LaTeX, поскольку он использует вспомогательный файл для хранения общего количества из предыдущего запуска, поэтому сноски не появятся в первом экземпляре. Для этого не требуется makeindex
/ xindy
, если только вы дополнительно не хотите полный глоссарий в начале или конце документа. Сортировка выполняется с помощью datatool-base
упорядоченных команд вставки , доступ к которым осуществляется через \@glo@sortedinsert
(предоставлено glossaries
). Это требует \@glo@sortinghandler
установки соответствующего обработчика сравнения ( \@glo@sorthandler@word
в данном случае).
Приведенный выше пример производит
вверху первой страницы. Сноска внизу страницы выглядит как
Форматирование можно настроить, отредактировав строки.
\footnotetext[1]{\@for\thisentry:=\entrylabellist\do{%
\glsentryname{\thisentry} \glsentrydesc{\thisentry}. }}%
Верхняя часть второй страницы выглядит так:
со сноской
Предостережение:Из-за асинхронной процедуры вывода TeX это может работать некорректно для записей, которые находятся в конце абзаца, охватывающего разрыв страницы.