每个单词都使用大写字母来索引条目

每个单词都使用大写字母来索引条目

TLDR;我想要一个类似索引的命令充分在执行之前进行扩展,以便 \newcommand{\words}{Some important Words}\indexCMD{\words}

确切地就像 \indexCMD{Some important Words}- 好像在做任何事情\words之前已经完全展开\index

请提供普通的 LaTeX。


我有一个严重的问题,我不知道该如何解决:

我想使用 splitidx 在我的本科论文末尾创建几个索引,但是,为了合并和自动化索引的某些部分,我正在编写一个宏,如果我使用\gls(glossaries-extra) 或\ac(acro) 的等效项,它会自动将一些内容添加到相应的索引中。我的问题是,每个索引条目都应有大写单词,因为我混合了德语和英语,并且正确排序。我希望有一个命令使 \index{some Words here AND there} 等同于 \index{Some Words Here AND There}

例子:

\documentclass{article}

\usepackage{splitidx}\makeindex
\newindex[Stichwortverzeichnis]{stw}

\newcommand{\inindex}[1]{#1\sindex[stw]{#1}}

\begin{document}
    \inindex{Words are} not as important as other \inindex{words are}.
    
    \printindex[stw]
\end{document}

\newcommand{\inindex}[1]{#1\sindex[stw]{#1@\protect\capitalisewords{#1}}}只是表面上起作用,因为它们是按照名称排序的,所以“some Words here AND there”与“Some Words Here AND There} 的条目不同,它们出现了两次,但完全相同。我只懂 LaTeX,对 TeX 了解不多,希望能得到一个我能完全理解(通过解释每个步骤)并从中学习的答案。我尝试了各种形式的 \expandafter、\expanded 和 \noexpand,但从未成功。


相同的问题,不同的场景:

\Acl来自\Acsacro 包

\DeclareAcronym{cfd}{
    short = CFD,
    long = numerische Strömungsmechanik
}
\newcommand{\newglossaryentryac}[2]{    
    \newglossaryentryacKeyCommand[
        id = {#1},
        description = {#2},
        longName = \Acl{#1},
        shortName = \Acs{#1}
    ]
}
\newglossaryentryac{cfd}{Beschreibung}

我需要如何修改它,才能使其等同于

\newcommand{\newglossaryentryac}{   
    \newglossaryentryacKeyCommand[
        id = {cfd} ,
        description = {Beschreibung},
        longName = Numerische Strömungsmechanik,
        shortName = CFD
    ]
}
\newglossaryentryac

答案1

我的建议是定义一个可以同时执行\DeclareAcronym\newglossaryentry业务的单一命令。

\documentclass{article}
\usepackage{acro,glossaries}
\makeglossaries

\ExplSyntaxOn

\keys_define:nn { learex/glossac }
 {
  short .tl_set:N = \l__clearex_glossac_short_tl,
  long  .tl_set:N = \l__clearex_glossac_long_tl,
 }
\tl_new:N \l__clearex_glossac_Short_tl
\tl_new:N \l__clearex_glossac_Long_tl

\NewDocumentCommand{\newglossaryentryac}{mmm}
 {% #1 = key, #2 = options, #3 = description
  \keys_set:nn { learex/glossac }
   {% clear all keys
    short={},long={},
    % assign the values
    #2,
   }
  \tl_set:Nx \l__clearex_glossac_Short_tl
   {
    \text_titlecase_first:V \l__clearex_glossac_short_tl
   }
  \tl_set:Nx \l__clearex_glossac_Long_tl
   {
    \text_titlecase_first:V \l__clearex_glossac_long_tl
   }
  \use:x
   {
    % acro
    \DeclareAcronym{#1}
     {
      short = \text_expand:n {\l__clearex_glossac_short_tl},
      long = \text_expand:n {\l__clearex_glossac_long_tl},
     }
    % glossaries
    \exp_not:N \newglossaryentry {#1}
     {
      name = \text_expand:n {\l__clearex_glossac_Long_tl},
      \exp_not:n { description = #3\glslink{#1s} },
     }
    \exp_not:N \newglossaryentry{#1s}
     {
      name = \text_expand:n {\l__clearex_glossac_Short_tl},
      \exp_not:n { description = {siehe~\gls{#1}} },
     }
   }
 }
\cs_generate_variant:Nn \text_titlecase_first:n { V }

\ExplSyntaxOff

\newglossaryentryac{cfd}{
    short = CFD,
    long = numerische Strömungsmechanik
}{Beschreibung}

\newglossaryentryac{tst}{
    short = TST,
    long = test
}{Test}
\newglossaryentryac{ubr}{
    short = übr,
    long = über
}{Über}

\begin{document}

\Acl{cfd} \Acl{cfd} \acl{cfd} \Acs{cfd} \acs{cfd}

\gls{cfd} \gls{cfds}

\Acl{tst} \Acs{tst}

\gls{tst} \gls{tsts}

\Acl{ubr} \Acs{ubr} \acl{ubr} \acs{ubr}

\gls{ubr} \gls{ubrs}

\printglossaries

\end{document}

使用 可以将首字母大写\text_titlecase_first:n\use:x部分是因为我们想要的是变量的值,而不是变量本身。 使用\text_expand:n可以确保特殊字符不会被破坏。

在此处输入图片描述

相关内容