如何使用 xesearch 搜索包含逗号的短语?

如何使用 xesearch 搜索包含逗号的短语?

我正在使用 xelatex 并尝试将包含逗号的文本段斜体化。我知道的唯一方法是使用 xesearch 及其命令 SearchList。它在大多数情况下都有效,但如果短语包含逗号,我似乎根本无法将整个短语作为单个参数传递给命令(通过转义逗号)。以下是我正在尝试执行的操作的示例:

\documentclass[11pt, a4paper]{article}
\usepackage{xesearch}
\begin{document}
  a, b, abc, b, a, b, c

  \SearchList*{list1}{\textit{#1}}{a, b}

  a, b, abc, b, a, b, c

  \StopList{list1}
\end{document} 

这样做可以匹配 a,但不会在任何位置将 b 斜体化。罪魁祸首似乎是作为参数传递给 SearchList 的 b 前面的空格。删除空格后,该行现在显示为

\SearchList*{list1}{\textit{#1}}{a,b}

导致单个 a 和 b 被斜体化(正如预期的那样)。

但是,我专门尝试将片段“a, b”斜体化(字母之间有逗号和空格),忽略字母 b 的其他实例。所有出现的“a, b”——在本例中是两个——都应该斜体化。

我已尝试按照此处的建议添加括号:我如何逃避逗号? 尽管我必须承认我不完全理解 Latex 中的转义序列。这是我尝试过的:

\documentclass[11pt, a4paper]{article}
\usepackage{xesearch}
\begin{document}
a, b, abc, b, a, b, c

\UndoBoundary{,}
\SearchList*{list1}{\textit{#1}}{{a, b}}

a, b, abc, b, a, b, c

\StopList{list1}
\MakeBoundary{,}
\end{document}

这似乎没有任何作用。如能提供任何帮助,我将不胜感激。

答案1

我不知道 xesearch 包,但你可以使用expl3正则表达式:

在此处输入图片描述

\documentclass[11pt, a4paper]{article}
\usepackage{expl3}

\ExplSyntaxOn
\cs_new_protected:Npn \zz #1
 {
  \tl_set:Nn \l_tmpa_tl { #1 }
  \regex_replace_all:nnN {a,\s b}{\c{textit}\cB\{\0\cE\}} \l_tmpa_tl
  \tl_use:N \l_tmpa_tl
 }
\ExplSyntaxOff

\begin{document}

a, b, abc, b, a, b, c

\zz{a, b, abc, b, a, b, c}

\end{document}

答案2

一种listofitems方法。

\documentclass[11pt, a4paper]{article}
\usepackage{listofitems}
\begin{document}
a, b, abc, b, a, b, c

\setsepchar{a, b}
\readlist\mylist{a, b, abc, b, a, b, c}
\foreachitem\i\in\mylist{\ifnum\icnt>1\relax\textit{\mylistsep[\icnt]}\fi\i}
\end{document} 

在此处输入图片描述

以宏形式来说,可以这样做:

\documentclass[11pt, a4paper]{article}
\usepackage{listofitems}
\newcommand\mysearch[2][a, b]{%
  \setsepchar{#1}%
  \readlist\mylist{#2}%
  \foreachitem\i\in\mylist{\ifnum\icnt>1\relax\textit{\mylistsep[\icnt]}\fi\i}%
}
\begin{document}
a, b, abc, b, a, b, c

\mysearch{a, b, abc, b, a, b, c}

\mysearch[abc, b]{a, b, abc, b, a, b, c}
\end{document} 

相关内容