makeindex:将“7B”按数字排序

makeindex:将“7B”按数字排序

以下是最小示例:

\documentclass[12pt]{article}
\usepackage{makeidx}
\makeindex
\begin{document}
A\index{7B} simple\index{5} example \index{9} showing\index{7} the problem
\printindex
\end{document} 

生成此索引:

我希望“7B”列在 7 和 9 之间。我知道只需使用 即可实现这一点\index{7@7B},但不幸的是,我不能使用这种方法(事实上,我有\footcite[7B]{ref},请参阅下面的更真实的最小示例)

有没有一种通用的方法可以解决这个问题,通过某种方式告诉“makeindex”以我想要的方式解释数字后的字母?

PS:我的真实来源与此类似:

\documentclass[12pt]{article}

\usepackage[backend=biber,style=oscola,indexing=cite]{biblatex}
\addbibresource{refs.bib}
\usepackage[style=british]{csquotes}

\usepackage[splitindex]{imakeidx}
\indexsetup{noclearpage}
\DeclareIndexAssociation{leg}{tableg}

\makeindex[name=tableg,%
title={Table of Legislation},%
options=-s oscola -c -l,%
columns=1]

\begin{document}

A\footcite[5]{sale} minimal \footcite[7]{sale} 
example\footcite[7B]{sale} showing\footcite[9]{sale} 
the problem. 

\printindex[tableg]
\end{document}

在 refs.bib 中我有:

@legislation{sale,
title = {Sale of Goods Act},
date = {1979},
keywords = {leg,en},
entrysubtype = {primary},
pagination = {section}, 
tabulate = {tableg}
}

得出的结果为:

在此处输入图片描述

答案1

在我的特殊情况下(使用 OSCOLA BibLaTeX 样式),可以通过更改来解决问题

\footcite[7B]{sale}

\DNI\footcite[7B]{sale}
\index[tableg]{Sale of Goods Act1979@\citeinindex {sale}!8@ s 7B} 

(该\DNI命令禁止引用,稍后通过命令手动引入\index;顺便说一下,这出现在 BL-OSCOLA 样式文档中,但那里的例子有一个额外的空白,这就是为什么一开始我无法让这个解决方案发挥作用)

无论如何,找到此类问题的通用解决方案就好了。

答案2

一个通用的解决方案是建立一个正则表达式,将索引项视为一组字段,如电话号码、DOI 或 IP 地址(或者甚至是邮政地址),以便 V64 位于 V128 之前。

这样的解决方案应该位于工具链的哪个位置?正则表达式可以makeindex通过其sort_rule指令在索引样式文件 (.ist) 中使用;正则表达式在 expl3 中可用;也可能在 lua 代码中可用。

但是 Xindy 已经知道如何做到这一点(在其/texmf-dist/xindy/modules/base/numeric-sort.xdy模块中)。

那么让我们看看 xindy 解决方案是什么样的。

A

将一些其他索引条目插入x\index{V64}x\index{V128}到测试文件中,我们得到以下结果(latex 需要使用 shell-escape 运行,以便 xindy 可以创建其工作文件):

手册 1

到目前为止一切顺利:2在之前12,等等。

插入章节编号,例如\index[s]{s 7B},用于单独索引s给出:

手册 2

也不错。(样式文件中的样式和布局xm-statute.xdy仅供参考。)

平均能量损失

\begin{filecontents*}[overwrite]{xm-statute.xdy}
(markup-locclass-list :open ": ")
(define-letter-group "Notes" :prefixes ("~b") :before "default")
(merge-rule "Note" "~b") 
(markup-letter-group 
           :open-head "~n {\setlength{\fboxsep}{5pt}\rmfamily\itshape\large\colorbox{yellow!20}{\textcolor{green!40!blue}{\hbox to \dimexpr\linewidth-2\fboxsep{
        \hfill " ; space is needed
           :close-head "\hfill}}~n}}"
       :group "Notes")
(markup-letter-group 
           :open-head "~n {\setlength{\fboxsep}{5pt}\sffamily\bfseries\large\colorbox{blue!30}{\textcolor{yellow!90!red!5}{\hbox to \dimexpr\linewidth-2\fboxsep{
        \hfill " ; space is needed
           :close-head "\hfill}}\nopagebreak\vspace{2mm}}}"
           )

(markup-locclass-list :open "\dotfill" :sep "")

\end{filecontents*}

\begin{filecontents*}[overwrite]{xm-generic.xdy}
(markup-letter-group 
           :open-head "~n {\fbox{\textcolor{red!65}{"
           :close-head "\hfill}}\nopagebreak\vspace{2mm}}"
           )

(markup-locclass-list :open "\dotfill" :sep "")

\end{filecontents*}




\documentclass{article}
\usepackage{xcolor}
\usepackage{fontspec}
\setmainfont{Noto Serif}

\usepackage[hyperindex=false,colorlinks]{hyperref}

\usepackage{imakeidx}
\makeindex[title=Xindy--manual: general,
program=texindy,
options=
        -M xm-generic.xdy 
        -C utf8
        ,
columnseprule,
]
\makeindex[name=s,title=Statutes,
program=truexindy,
options=
        -L korean
        -M texindy.xdy
        -M numeric-sort.xdy
        -M xm-statute.xdy 
        -C utf8
        ,
columnseprule,
]

\begin{document}

x\index{aardvark}
x\index[s]{Note!xindy!manual}

\newpage
x\index{10.2.250.1}
x\index{10.12.9.12}
x\index{60.12.251.12}
x\index{10.2.250.1}
x\index{128.12.250.12}
x\index{128.1.250.2}
x\index{V64}x\index{V128}
x\index[s]{s 7}x\index[s]{s 7B}x\index[s]{s 50}x\index[s]{s 5}x\index[s]{s 3(2)(a)}
x\index[s]{SOGA!s 7}x\index[s]{SOGA!s 7B}x\index[s]{SOGA!s 50}x\index[s]{SOGA!s 5}x\index[s]{SOGA!s 3(2)(a)}
x\index{zebra}
x\index{index!xindy!manual}
x\index[s]{index!name!s}
End.


\printindex
\printindex[s]

\end{document}

添加oscola可得到一个一般(即未命名)的索引:

奥斯科拉 1

一切都进展顺利。

legislation第一次(lua)latex 运行后,单独的索引显示:

oscola 2 预饮

因此,号码布信息正在传播。

运行 biber 然后再次运行 latex 填充数据:

oscola 2 后饮

一切看起来都已整理好。(;))

平均能量损失

%==========================================
\begin{filecontents*}[overwrite]{\jobname.bib}
@legislation{sale,
title = {Sale of Goods Act},
date = {1979},
keywords = {leg,en},
entrysubtype = {primary},
pagination = {section}, 
%tabulate = {tableg}
}
\end{filecontents*}


%==========================================
\begin{filecontents*}[overwrite]{oscola-dev.xdy}
(markup-locclass-list :open ": ")
(define-letter-group "Notes" :prefixes ("~b") :before "default")
(merge-rule "Note" "~b") 
(markup-letter-group 
           :open-head "~n {\setlength{\fboxsep}{5pt}\rmfamily\itshape\large\colorbox{yellow!20}{\textcolor{green!40!blue}{\hbox to \dimexpr\linewidth-2\fboxsep{
        \hfill " ; space is needed
           :close-head "\hfill}}~n}}"
       :group "Notes")
(markup-letter-group 
           :open-head "~n {\setlength{\fboxsep}{5pt}\sffamily\bfseries\large\hbox to \dimexpr\linewidth-2\fboxsep{
        \hfill " ; space is needed
           :close-head "\hfill}}\nopagebreak\vspace{2mm}"
           )

(markup-locclass-list :open "\dotfill" :sep "")

\end{filecontents*}

%==========================================
\begin{filecontents*}[overwrite]{xm-generic.xdy}
(markup-letter-group 
           :open-head "~n {\fbox{\textcolor{red!65}{"
           :close-head "\hfill}}\nopagebreak\vspace{2mm}}"
           )

(markup-locclass-list :open "\dotfill" :sep "")

\end{filecontents*}




%==========================================
\documentclass{article}
\usepackage{xcolor}
\usepackage{fontspec}
\setmainfont{Noto Serif}
\usepackage[backend=biber,style=oscola,indexing=cite]{biblatex}
\addbibresource{\jobname.bib}
\usepackage[style=british]{csquotes}


\usepackage[hyperindex=false,colorlinks]{hyperref}

\usepackage{imakeidx}
\makeindex[title=Xindy--oscola-dev: general,
program=texindy,
options=
        -M xm-generic.xdy 
        -C utf8
        ,
columnseprule,
]
\makeindex[name=legislation,title=Table of Statutes,
program=texindy,
options=
        -M oscola-dev.xdy 
        -C utf8
        ,
columns=1,
]
\DeclareIndexAssociation{enprimleg}{legislation}


\begin{document}
A\footcites[5]{sale}[21C]{sale} minimal \footcite[7]{sale} x\footcite[21]{sale}
example%\footcite[7B]{sale} 
%\DNI
\footcite[7B]{sale}
showing\footcite[9]{sale} 
the problem.\footcite[3(2)(a)]{sale} 

x\index{aardvark}
x\index[legislation]{Note!xindy!oscola-dev}

\newpage
x\index{10.2.250.1}
x\index{10.12.9.12}
x\index{60.12.251.12}
x\index{10.2.250.1}
x\index{128.12.250.12}
x\index{128.1.250.2}
x\index{V64}x\index{V128}

x\index{zebra}
x\index{index!xindy!oscola-dev}
\index[legislation]{Test entry}
\index[legislation]{SOGA|see{\citeinindex{sale}}}
x\footcites[5]{sale}[21C]{sale} 
\index[legislation]{index!name!legislation}
End.


\printindex
\printindex[legislation]

\end{document}

C

现在,我们转入生产模式,换上更符合我们风格的朴素服装,我们的总体指数相当整洁地变成了:

产品总索引

以及立法:

产品法规索引

但现在我们有一个不同的问题:当所有信息已知时,legislation.ind文件是在\printindex[legislation]文件末尾生成的。.tex

.ind我们需要在下一次运行开始时获取该文件,但它只是数据,应用了默认索引名称、字体和布局:

产品腿无格式

因此我们需要应用类似 bl-oscola 的\printindexearly命令来获取所有格式。

并将其打印在预期的位置,靠近文档的前面。

幸运的是,bl-oscola 的维护者,作为卓越的代表,已经投入了所有的艰苦工作,思考、设计、实施(我的意思是,艰苦);因此,我们所要做的就是将一个宏中的一行代码从 更改为\@input@{\jobname-#1.ind}\@input@{#1.ind}然后所有的格式流将变成:

产品腿格式化

相关内容