删除嵌套的 LaTeX `\index`

删除嵌套的 LaTeX `\index`

我该如何使用正则表达式和sed删除\index任何标签内出现的所有标签\index

例如像这样的嵌套混乱:

\index{Test\index{test\index{test}}ing One\index{one} Two\index{two} Three\index{three}}

会变成

\index{Testing One Two Three}

我有\index像这样的复杂嵌套:

\documentclass{article}
\usepackage{makeidx}
\makeindex

\makeatletter
\let\oldtheindex\theindex
\renewcommand{\theindex}{%
  \oldtheindex%
  \let\index\@gobble}% Remove \index functionality
\makeatother

\begin{document}

a person\index{a person}\footnote{A. Person\index{a person}, \textit{On A. Person\index{a person!\textsc{some journal} or \textsc{His Papers\index{a person!\textit{His Papers}}of A. Person}!\textit{On His Papers}}\index{some other person}'s Lines of Force}, here's some lorem ipsum text (\textsc{Prestigious Journal}, vol. 10, part 1, pp. 27 to 83. — \textsc{His Papers\index{a person!\textit{His Papers}}of A. Person\index{a person}}, vol. 1, pp. 156 to 219; New York, 2005).}

\printindex

\end{document}

但是,我收到了这个错误。

\\->\let \reserved@e                                                                          
                     \relax \let \reserved@f \relax \@ifstar {\let \reserved...               
l.14 ... vol. 1, pp. 156 to 219; New York, 2005).}                                            

为什么?

答案1

\index您可以在环境中使宏无效theindex

在此处输入图片描述

\documentclass{article}
\usepackage{makeidx}
\makeindex

\makeatletter
\let\oldtheindex\theindex
\renewcommand{\theindex}{%
  \oldtheindex%
  \let\index\@gobble}% Remove \index functionality
\makeatother

\begin{document}

\index{Test\index{test\index{test}}ing One\index{one} Two\index{two} Three\index{three}}

\printindex

\end{document}

以下是该问题的概述:

  1. 编译上述文件,将写入一个.idx包含以下内容的文件:

    \indexentry{Test\index{test\index{test}}ing One\index{one} Two\index{two} Three\index{three}}{1}
    
  2. 运行makeindex此文件,它将创建一个.ind包含以下内容的文件:

    \begin{theindex}
    
      \item Test\index{test\index{test}}ing One\index{one} Two\index{two} Three\index{three}, 
            1
    
    \end{theindex}
    
  3. 现在编译原始文件,这将\index在中创建一组新的条目.ind,从而使新的条目.idx类似于:

    \indexentry{Test\index{test\index{test}}ing One\index{one} Two\index{two} Three\index{three}}{1}
    \indexentry{test\index{test}}{1}
    \indexentry{one}{1}
    \indexentry{two}{1}
    \indexentry{three}{1}
    
  4. ...依此类推,直到所有\index条目都已解决。

解决方案在环境启动时进行干预theindex,并删除 的任何进一步功能\index。由于\begin{theindex}...\end{theindex}形成一个组,因此对 的更改\index是局部的。


根据您更新的帖子,我建议使用以下定义\index在调用时删除嵌套的 es :\index

\makeatletter
\let\oldindex\index
\renewcommand{\index}[1]{{%
  \let\index\@gobble%
  \oldindex{#1}%
}}
\maketother

请注意,您使用索引的方式不太有效。当您在索引中使用格式化命令时,排序不正确。请参阅makeindex 文档如何放置具有不同格式的条目但仍保持适当的排序(参见符号@)。

以下是完整的 MWE:

在此处输入图片描述

\documentclass{article}
\usepackage{makeidx}
\makeindex

\makeatletter
\let\oldindex\index
\renewcommand{\index}[1]{{%
  \let\index\@gobble%
  \oldindex{#1}%
}}
\makeatother

\begin{document}

a person%
\index{a person}% First entry
\footnote{A. Person%
  \index{a person}% Second entry
  , \textit{On A. Person%
    \index{a person!\textsc{some journal} or \textsc{His Papers\index{a person!\textit{His Papers}}of A. Person}!\textit{On His Papers}}% Third entry
    \index{some other person}% Fourth entry
    's Lines of Force}, here's some lorem ipsum text (\textsc{Prestigious Journal}, vol. 10, part 1, pp. 27 to 83. — \textsc{His Papers%
    \index{a person!\textit{His Papers}}% Fifth entry
    of A. Person%
    \index{a person}% Sixth entry
    }, vol. 1, pp. 156 to 219; New York, 2005).%
  }

\printindex

\end{document}

显示.idx六个标记的条目:

\indexentry{a person}{1}
\indexentry{a person}{1}
\indexentry{a person!\textsc  {some journal} or \textsc  {His Papersof A. Person}!\textit  {On His Papers}}{1}
\indexentry{some other person}{1}
\indexentry{a person!\textit  {His Papers}}{1}
\indexentry{a person}{1}

相关内容