我该如何使用正则表达式和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}
以下是该问题的概述:
编译上述文件,将写入一个
.idx
包含以下内容的文件:\indexentry{Test\index{test\index{test}}ing One\index{one} Two\index{two} Three\index{three}}{1}
运行
makeindex
此文件,它将创建一个.ind
包含以下内容的文件:\begin{theindex} \item Test\index{test\index{test}}ing One\index{one} Two\index{two} Three\index{three}, 1 \end{theindex}
现在编译原始文件,这将
\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}
...依此类推,直到所有
\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}