我找到了一个最小的工作示例。如果\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
在环境中。但是,为了对称,我将其保留了下来。