使用词汇表的排序顺序错误(似乎忽略了排序键)

使用词汇表的排序顺序错误(似乎忽略了排序键)

对于我的博士论文,我使用 Nicola Talbot 的词汇表包来创建多个词汇表 - 包括我在论文中引用的法院判决列表。

在上述法院判决列表中,我希望按法院名称和判决日期对它们进行排序(给定格式:DD.MM.YYYY)。因此,我使用 xstring 包创建排序键(格式为“Court-YYYY-MM-DD”),并将其作为排序键传递到 \newglossaryentry 命令中(通过我的宏 \decision{key}{shortinfo}{longinfo})。

以下示例中的排序键为:

BGH-2000-12-08
BGH-2003-01-09
BGH-2010-10-05 

我使用我的 latex 引擎中的以下 bash 脚本制作索引

for file in *-glo ; do
makeindex -t ${file%-glo}-glg -s $docname.ist -o ${file%-glo}-gls $file
done

不幸的是,打印出来的决策词汇表似乎忽略了排序键。决策条目似乎仍然只使用词汇表条目描述进行排序。

以下最小示例的输出显示为

BGH, Urteil vom 05.10.2010, Az. V ZR 228/09, Online-Entscheidungsdatenbank des BGH. 
BGH, Urteil vom 08.12.2000, Az. V ZR 482/99, Online-Entscheidungsdatenbank des BGH. 
BGH, Urteil vom 09.01.2003, Az. VII ZR 181/00, NJW 2003, 1188.

代替

BGH, Urteil vom 08.12.2000, Az. V ZR 482/99, Online-Entscheidungsdatenbank des BGH. 
BGH, Urteil vom 09.01.2003, Az. VII ZR 181/00, NJW 2003, 1188.
BGH, Urteil vom 05.10.2010, Az. V ZR 228/09, Online-Entscheidungsdatenbank des BGH. 

最小示例:

\usepackage{xstring}    
\usepackage[toc=true]{glossaries}
\newglossary[decision-glg]{decision}{decision-gls}{decision-glo}{Decisions}
\makeglossaries

% Macro to create sort key
\newcommand{\getCourt}[1]{\StrBefore[1]{#1}{,}}
\newcommand{\getYear}[1]{\StrBetween[2,2]{#1}{.}{,}}
\newcommand{\getMonth}[1]{\StrBetween[1,2]{#1}{.}{.}}
\newcommand{\getDay}[1]{\StrBetween[1,1]{#1}{vom }{.}}
\newcommand{\getsortstring}[1]{\getCourt{#1}-\getYear{#1}-\getMonth{#1}-\getDay{#1}}
\newcommand{\justprint}[1]{#1}

% Manipulate sorting
\let\courtdate\justprint
\renewcommand{\glsprestandardsort}[3]{%
    \ifdefstring{#2}{decision}{%
        \let\courtdate\getsortstring%
        \edef#1{\expandafter\expandonce\expandafter{#1}}%
        \let\courtdate\justprint%
        \glsdosanitizesort%
    }{%
        \glsdosanitizesort%
    }%
}

% Macro to add decisions as glossary entry: \decision{key}{shortinfo}{longinfo}
\newcommand{\decision}[3]{%
    \newglossaryentry{#1}{type=decision, name={#2}, description={#3}, sort={\getsortstring{#3}}}%
}

% Create new style for the glossary
\newglossarystyle{decisionlist}{%
  \renewenvironment{theglossary}{\begin{spacing}{1.5}}{\end{spacing}}%
  \renewcommand*{\glossaryheader}{}%
  \renewcommand*{\glsgroupheading}[1]{}%
  \renewcommand*{\glossentry}[2]{%
    \noindent% No left padding
    \textbf{% Make bold
        \StrBefore{\glossentrydesc{##1}}{,}% Insert court name
    },% Add comma
    \StrBehind{\glossentrydesc{##1}}{,}.% Insert decision info
    \\}% Insert newline after entry
  \renewcommand*{\subglossentry}[3]{}%
  \renewcommand*{\glsgroupskip}{}%
} 

% Add decisions as glossary entries using the above macro
\decision{BGH, V ZR 482/99}{BGHZ-Online, V ZR 482/99}{BGH, Urteil vom 08.12.2000, Az. V ZR 482/99, Online-Entscheidungsdatenbank des BGH}
\decision{BGH, VII ZR 181/00}{BGH, NJW 2003, 1188}{BGH, Urteil vom 09.01.2003, Az. VII ZR 181/00, NJW 2003, 1188}
\decision{BGH, V ZR 228/09}{BGHZ-Online, V ZR 228/09}{BGH, Urteil vom 05.10.2010, Az. V ZR 228/09, Online-Entscheidungsdatenbank des BGH}

\begin{document}

\setglossarystyle{decisionlist}
\printglossary[type=decision]

I am citing all of the above decisions. Those are \gls{BGH, V ZR 482/99}, \gls{BGH, V ZR 228/09} and \gls{BGH, VII ZR 181/00}.

由于我现在已经尝试了很长时间,以弄清楚为什么尽管我传递了排序键,但条目仍然以错误的顺序显示,如果有人可以指引我,我会非常高兴:)

答案1

如果你查看该.decision-glo文件,你可以看到该键的值sort。第一行是:

\glossaryentry{\getCourt {BGH, Urteil vom 08.12.2000, Az. V ZR 482/99, Online-Entscheidungsdatenbank des BGH}-\getYear {BGH, Urteil vom 08.12.2000, Az. V ZR 482/99, Online-Entscheidungsdatenbank des BGH}-\getMonth {BGH, Urteil vom 08.12.2000, Az. V ZR 482/99, Online-Entscheidungsdatenbank des BGH}-\getDay {BGH, Urteil vom 08.12.2000, Az. V ZR 482/99, Online-Entscheidungsdatenbank des BGH}?\glossentry{BGH, V ZR 482/99}|setentrycounter[]{page}\glsnumberformat}{1}

所以sort值还没有被扩展。我们可以添加一些\show代码来找出发生了什么:

\renewcommand{\glsprestandardsort}[3]{%
    \ifdefstring{#2}{decision}{%
        \let\courtdate\getsortstring%
\show#1%
        \edef#1{\expandafter\expandonce\expandafter{#1}}%
\show#1%
        \let\courtdate\justprint%
        \glsdosanitizesort%
    }{%
        \glsdosanitizesort%
    }%
}

第一个\show#1产生:

> \@glo@sort=macro:
->\getsortstring {BGH, Urteil vom 08.12.2000, Az. V ZR 482/99, Online-Entscheid
ungsdatenbank des BGH}.

第二个结果是:

> \@glo@sort=macro:
->\getCourt {BGH, Urteil vom 08.12.2000, Az. V ZR 482/99, Online-Entscheidungsd
atenbank des BGH}-\getYear {BGH, Urteil vom 08.12.2000, Az. V ZR 482/99, Online
-Entscheidungsdatenbank des BGH}-\getMonth {BGH, Urteil vom 08.12.2000, Az. V Z
R 482/99, Online-Entscheidungsdatenbank des BGH}-\getDay {BGH, Urteil vom 08.12
.2000, Az. V ZR 482/99, Online-Entscheidungsdatenbank des BGH}.

所以这里的扩展出了问题。如果的参数\getsortstring总是采用以下形式法庭, Urteil vom 毫米,其余的那么这是另一种方法:

\def\parsesortstring#1,#2vom #3.#4.#5,#6\endparsesortstring{#1-#5-#4-#3}
\newcommand{\getsortstring}[1]{\parsesortstring#1\endparsesortstring}

% Manipulate sorting
\let\courtdate\justprint
\renewcommand{\glsprestandardsort}[3]{%
    \ifdefstring{#2}{decision}{%
    }{%
        \glsdosanitizesort%
    }%
}

这只是删除了\glsdosanitizesort类型decision,允许排序值在写入外部文件时完全展开。第一行.decision-glo现在是:

\glossaryentry{BGH-2000-12-08?\glossentry{BGH, V ZR 482/99}|setentrycounter[]{page}\glsnumberformat}{1}

具有正确的排序值BGH-2000-12-08

相关内容