![Bibleref-xidx : 旧约和新约部分](https://linux22.com/image/475099/Bibleref-xidx%20%3A%20%E6%97%A7%E7%BA%A6%E5%92%8C%E6%96%B0%E7%BA%A6%E9%83%A8%E5%88%86.png)
我计划使用它bibleref-xidx
来生成圣经索引,其中的经文作为章节的子项目出现:
\documentclass{memoir}
\usepackage{etoolbox,indextools,bibleref-xidx}
\usepackage[hidelinks]{hyperref}
\makeindex[title=Person Names Index]
\makeindex[title=Scriptural Index,name=scr,columns=1]
\renewcommand{\biblerefindex}{\index[scr]}
\begin{document}
John Doe\index{Doe}
\ibibleverse{Mk}(1:11)
\ibibleverse{Mk}(1:34)
\ibibleverse{Mk}(3:7)
\ibibleverse{Ex}(3:14)
\printindex
\printindex[scr]
\end{document}
除此之外,我想将索引细分为两个部分,分别针对旧约和新约。
我尝试过使用\biblerefcategory{Old Testament}
和\biblerefcategory{New Testament}
,以及
\biblerefmap{Exodus}{1@Old Testament!01}
\biblerefmap{Mark}{2@New Testament!01}
但这两种方法似乎不兼容bibleref-xidx
(它们适用于bibleref
,但诗句不再是章节的子项目......)。
有什么可能的解决方法吗?
答案1
我找到了一个解决方案。以下是概念证明:
\documentclass{memoir}
\usepackage{bibleref-xidx}
\usepackage{indextools}
\makeindex[title=Old Testament,name=ot,columns=1]
\makeindex[title=New Testament,name=nt,columns=1]
\newtoggle{AT}
% Switch to toggle for each book
\makeatletter
\pretocmd{\br@Ex}{\toggletrue{AT}}{}{}
\pretocmd{\br@Mk}{\togglefalse{AT}}{}{}
% etc
\makeatother
% Creates two indexes
\renewcommand*{\biblerefindex}{\iftoggle{AT}{\index[ot]}{\index[nt]}}
\setindexbooktitle{Ex}{Book of Exodus}
\setindexbooktitle{Mk}{Gospel according to Mark}
\biblerefstyle{jerusalem}
\begin{document}
\ibibleverse{Ex}(1:2)
\ibibleverse{Mk}(4:7)
\ibibleverse{Ex}(5:22)
\ibibleverse{Mk}(9:12)
\printindex[ot]
\printindex[nt]
\end{document}
也许有人对此感兴趣和/或可以判断该方法是否足够可靠。
答案2
我发现我以前的方法与\ibiblechvs
命令不兼容,因为它不调用\br@<Book>
宏。
因此,另一种方法是绘制圣经书籍图,然后插入\@bible@verse
编号测试(假设旧约书籍编号为 1-46,新约书籍编号为 47ss)。
\documentclass{memoir}
\usepackage{bibleref,indextools}
%%% Sorting map %%%
\biblerefmap{Gn}{001}
\biblerefmap{Ex}{002}
% ...
\biblerefmap{Mt}{047}
\biblerefmap{Mk}{048}
% ...
\makeatletter
\renewcommand*{\@bible@verse}[1]{%
\bbl@ifunset{bbl@active@\string:}%
{}%
{\shorthandoff:}%
\@ifundefined{br@#1}%
{%
\PackageError{bibleref}{Unknown book '#1'}{}%
}%
{%
%%% Test for Old Testament/New Testament %%%
\ifnum47>0\csname @bibleref@map@#1\endcsname\relax%
\renewcommand{\biblerefindex}{\index[at]}%
\else%
\renewcommand{\biblerefindex}{\index[nt]}%
\fi%
%%%%%%
\@bv@idxsort{\csname br@#1\endcsname}%
\def\@bv@chidxsort{}%
\BRbooktitlestyle{\csname br@#1\endcsname}%
\let\@bv@org@bookof\BRbookof
\let\@bv@org@booknumberstyle\BRbooknumberstyle
\let\@bv@org@epistletothe\BRepistletothe
\let\@bv@org@epistlenumberstyle\BRepistlenumberstyle
\def\BRbookof{\string\BRbookof\space}%
\def\BRbooknumberstyle{\string\BRbooknumberstyle\space}%
\def\BRepistletothe{\string\BRepistletothe\space}%
\def\BRepistlenumberstyle{\string\BRepistlenumberstyle\space}%
\@ifundefined{bri@#1}%
{%
\protected@edef\@bv@mainidxentry{%
\protect\BRbooktitlestyle{\csname br@#1\endcsname}}%
}%
{%
\protected@edef\@bv@mainidxentry{%
\protect\BRbooktitlestyle{\csname bri@#1\endcsname}}%
}%
\let\BRbookof\@bv@org@bookof
\let\BRbooknumberstyle\@bv@org@booknumberstyle
\let\BRepistletothe\@bv@org@epistletothe
\let\BRepistlenumberstyle\@bv@org@epistlenumberstyle
}%
\new@ifnextchar(%
{\BRbkchsep\@bibleverse}%
{\@end@@bibleverse}%
}
\makeatother
\makeindex[title=Antiguo Testamento,name=at]
\makeindex[title=Nuevo Testamento,name=nt]
\indexsetup{level=\section*,noclearpage}
\biblerefstyle{jerusalem}
\begin{document}
\ibibleverse{Gn}(4:12)
\ibibleverse{Mt}(3:7)
\ibiblechvs{Ex}(6:3)
\chapter*{Índice bíblico}
\printindex[at]
\printindex[nt]
\end{document}