숫자가 색인화되는 색인 정렬

숫자가 색인화되는 색인 정렬

나는 별도의 날짜 색인(실제로 특정 이벤트의 연도 또는 연도 범위만)이 있는 방대한 문서를 가지고 있습니다. 나는 memoir.

때로는 연도가 정확히 알려져 있는 경우도 있습니다.

\index[dates]{1875!Event xyz}

때로는 연도가 범위인 경우도 있습니다.

\index[dates]{1822--1867!Event abc}

이러한 정렬은 다음과 같이 색인으로 정렬됩니다.

1822-1897
이벤트 xxxx 77,87
이벤트 pppp 73

1829-1844
이벤트 zzz 79

1756
이벤트 xxx2 99

즉, 날짜 범위는 알파벳순으로 정렬되며 숫자순으로 정렬되어 홀수 순서를 생성하는 단일 숫자 항목과 분리됩니다. 주문할 수 있도록 숫자를 숫자순이 아닌 알파벳순으로 정렬할 수 있는 방법이 있나요?

1
1-5
2
3
3-5
4

오히려

1--5
3--5
1
2
3
4

색인 항목은 매크로를 통해 이루어집니다.

\newcommand{\indexdate}[2]{#1\index[dates]{#1!{#2}}}

따라서 정렬 순서를 적용하기 위해 수천 개의 항목을 모두 수동으로 편집하지 않고도 매크로를 한 번만 변경하면 원하는 결과를 얻을 수 있습니다.

나는 이것에 장애물에 부딪쳤다. MWE가 여기서 추가로 사용될 것이라고는 생각하지 않지만 게시하게 되어 기쁘게 생각합니다.

답변1

Makeindex는 숫자를 숫자 순서로 정렬합니다.

1
9
10

그러나 범위는 숫자가 아닙니다. 범위 기호는 --Makeindex가 그러한 항목을 숫자로 취하는 것을 방지합니다. 이러한 항목은 어휘순으로 정렬됩니다. 또한 숫자보다 앞에 있습니다.

Makeindex에 대한 정렬 키를 지정할 수 있습니다. 정렬 키가 숫자인 경우 자릿수는 연도 및 연도 범위에서 동일해야 합니다. 예:

\newcommand{\indexdate}[2]{#1\index[dates]{#10000@#1!#2}}
\newcommand{\indexdaterange}[3]{#1--#2\index[dates]{#1#2@#1--#2!#3}}

sortkey는 이전 항목입니다 @. 연도 범위의 정렬 키는 2개의 4자리 연도입니다. 연도의 경우 정렬 키는 4자리 연도이며 모든 숫자 정렬 키의 8자리를 채우기 위해 4개의 0이 옵니다.

또는 정렬 키가 숫자가 아닌 숫자를 추가할 수 있으며 항목은 4자리 연도를 사용하여 어휘 순서로 정렬되며 숫자 순서는 실제로 필요하지 않습니다.

\newcommand{\indexdate}[2]{#1\index[dates]{#1x@#1!#2}}

답변2

신디병합 및 정렬 규칙 덕분에 이러한 경우에 이미 준비가 되어 있습니다. 마지막 페이지의 예와 미리보기를 동봉합니다. 쉘 이스케이프를 사용하여 실행하거나 이 예제에서 다음 세 줄을 실행하십시오( 글꼴 관련 패키지가 아직 활성화되지 않았기 때문에 바로 사용할 수도 있습니다) pdflatex:xelatex

lualatex Mal-xindy-numbers.tex
xindy -M texindy -L 일반 -C utf8 -M Mal-style -o 날짜.ind 날짜.idx
lualatex Mal-xindy-numbers.tex

%! *latex mal-xindy-numbers.tex
%  with shell escape on
\documentclass{memoir}
%\usepackage{xltxtra} % use: inputenc (pdflatex), fontspec (xelatex)
\usepackage[hyperindex=false,colorlinks]{hyperref}
\usepackage[xindy]{imakeidx}
\indexsetup{firstpagestyle=empty}
\makeatletter\def\imki@progdefault{xindy}\makeatother
\makeindex[name=dates, title=Milestone events, options=-M texindy -L general -C utf8 -M mal-style]
\def\indexdate#1#2{#1\index[dates]{#1!#2}}
\usepackage{filecontents}
\begin{filecontents*}{mal-style.xdy}
(markup-locref :attr "default" :open "\hyperpage{" :close "}")
\end{filecontents*}

\begin{document}
\indexdate{1}{Event A}
\indexdate{1}{Event I}
\indexdate{1--5}{Event I}
\indexdate{1--5}{Event X}
\indexdate{1--5}{Event B}
\indexdate{2}{Event C}
\indexdate{3}{Event D}
\indexdate{3--5}{Event E}
\indexdate{4}{Event F}
\indexdate{1950}{Event G}
\indexdate{1950}{Event K}
\newpage
\indexdate{1950}{Event G}
\indexdate{1950}{Event K}
\indexdate{1950--1955}{Event G}
\indexdate{1948}{Event L}
\indexdate{1949--1951}{Event G}
\indexdate{1949--1950}{Event H}
\printindex[dates]
\end{document}

음

관련 정보