对索引进行排序时忽略连字符

对索引进行排序时忽略连字符

我们如何在对索引进行排序时忽略连字符?以下是一个例子:

\documentclass{article}
\usepackage{imakeidx}
\makeindex[columns=1]
\begin{document}
Test
\index{firstaid}
\index{first-love}
\printindex
\end{document}

此代码的结果是: 先有爱,后有急救

但我们希望“firstaid”位于“first-love”之前。我们可以@在每个实例中使用该选项\index,但我想知道是否有一种全局方法来设置它。

答案1

如果你想摆脱全部连字符进行排序,您可以这样做,\index{firstlove@first-love}当输入时,它基本上会自动执行\Index{first-love}

\documentclass{article}
\usepackage{imakeidx}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\Index}{om}
 {
  \str_set:Nn \l_tmpa_str { #2 }
  \str_if_in:NnTF \l_tmpa_str { - }
   {
    \str_set_eq:NN \l_tmpb_str \l_tmpa_str
    \str_remove_all:Nn \l_tmpb_str { - }
    \use:x
     {
      \exp_not:N \index
      \IfValueT { #1 } { [ #1 ] }
      { \str_use:N \l_tmpb_str @ \str_use:N \l_tmpa_str }
     }
   }
   {
    \use:x
     {
      \exp_not:N \index
      \IfValueT { #1 } { [ #1 ] }
      { \str_use:N \l_tmpa_str }
     }
   }
 }
\ExplSyntaxOff

\makeindex[columns=1]

\begin{document}

Test
\Index{firstaid}
\Index{first-love}
\printindex

\end{document}

在此处输入图片描述

如果你想保留\index

\documentclass{article}
\usepackage{imakeidx}
\usepackage{xparse}

\AtBeginDocument{%
  \let\originalindex\index
  \let\index\newindex
}

\ExplSyntaxOn
\NewDocumentCommand{\newindex}{om}
 {
  \str_set:Nn \l_tmpa_str { #2 }
  \str_if_in:NnTF \l_tmpa_str { - }
   {
    \str_set_eq:NN \l_tmpb_str \l_tmpa_str
    \str_remove_all:Nn \l_tmpb_str { - }
    \use:x
     {
      \exp_not:N \originalindex
      \IfValueT { #1 } { [ #1 ] }
      { \str_use:N \l_tmpb_str @ \str_use:N \l_tmpa_str }
     }
   }
   {
    \use:x
     {
      \exp_not:N \originalindex
      \IfValueT { #1 } { [ #1 ] }
      { \str_use:N \l_tmpa_str }
     }
   }
 }
\ExplSyntaxOff

\makeindex[columns=1]

\begin{document}

Test
\index{firstaid}
\index{first-love}
\printindex

\end{document}

相关内容