xesearch 处理 itemize (\item) 时出错

xesearch 处理 itemize (\item) 时出错

我找到了一个最小的工作示例。如果\item good在搜索列表中有相同的起始词,则文档不会编译。

如果我写了类似的内容\item foo,文档就会编译。

\documentclass{article}
\usepackage{xesearch}

\begin{document}
\SearchList{l}{Better}{good job}

\begin{itemize}
\item good
\end{itemize}

happy good job

\end{document}

错误信息是

!LaTeX 错误:出现错误 — — 可能缺少 \item。

请参阅 LaTeX 手册或 LaTeX Companion 以获取解释。
输入 H 即可获得紧急帮助。
 ...

l.17 \end{逐项列出}

有什么方法可以解决这个问题?我的真实文件有很多 itemize 环境,我希望在 itemize 环境之外对任意文本运行 xesearch。

我也很高兴知道如何调试这个错误,比如搜索和替换后的文本是什么样的。

答案1

xesearch包提供了命令\StopSearching\StartSearching,您可以将其挂接到环境中itemize。但是,这些命令似乎也有一个错误,因为这会导致\xs@String未定义内部宏的错误。在代码中的某个地方定义它允许成功编译:

\documentclass{article}
\usepackage{xesearch}
\makeatletter
\def\xs@String{}
\makeatother
\AddToHook{env/itemize/begin}{\StopSearching}
\AddToHook{env/itemize/end}{\StartSearching}
\begin{document}
\SearchList{l}{Better}{good job}
\begin{itemize}
\item good
\end{itemize}
happy good job

\end{document}

结果:

在此处输入图片描述

请注意,end 钩子实际上不是必需的,begin 钩子将范围限制\StopSearching在环境中。但是,为了对称,我将其保留了下来。

相关内容