나는 별도의 날짜 색인(실제로 특정 이벤트의 연도 또는 연도 범위만)이 있는 방대한 문서를 가지고 있습니다. 나는 memoir
.
때로는 연도가 정확히 알려져 있는 경우도 있습니다.
\index[dates]{1875!Event xyz}
때로는 연도가 범위인 경우도 있습니다.
\index[dates]{1822--1867!Event abc}
이러한 정렬은 다음과 같이 색인으로 정렬됩니다.
1822-1897
이벤트 xxxx 77,87
이벤트 pppp 731829-1844
이벤트 zzz 791756
이벤트 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}