寻找在 Latex 中创建字符串处理命令的最佳方法来实现如下所示的功能:
- 给定一长段普通文本和一组关键字,根据一些可配置选项自动格式化文本中的匹配单词(例如通过添加 \emph 或 \textbf 等)
- 给定一长段普通文本,将每一行转换为一个列表项(例如,将每个 \\ 转换为 \item 并将整个内容括在 \begin{itemize} 内等......
我正在创建一个样式包,它需要此功能来自动格式化我的包用户提供的纯文本(基于他们的关键字和通过命令参数提供的其他选项等)
最好的方法是什么?看起来\搜索列表仅适用于 xelatex。对通用实现感兴趣。
latex 是否有字符串替换命令可以帮助实现这一点?任何现有的包或代码示例都会有很大帮助。
答案1
在到处搜索和询问后,找到了适合此目的的东西。记录在这里,以防有人在寻找类似的功能。
在下面的代码中,命令FormatKeyWords
接受关键字和普通文本(以及可选的格式规范),将输入文本中关键字的每个实例转换为指定的格式。
\RequirePackage{xstring} % defines string manipulations for keyword replacement
\RequirePackage{tikz} % defines foreach to loop over keywords
\RequirePackage{xargs} % allows optional parameters in commands
\makeatletter
%
% Default format style used by \CVM@FormatKeyWords
% [1]: the text to be formatted
\newcommand{\CVM@Format}[1]{\textbf{\small#1}}
%
% Arguments:
% [1]: [optional]format specification
% [2]: [optional]0 or number indicating the number of occurrences to replace
% [3]: Keywords (as comma separated values)
% [4]: Text containing the keywords
\newcommandx{\FormatKeyWords}[4][1=\CVM@Format,2=0]{
\expandarg
\foreach \keyword in #3
{
\begingroup\edef\x{\endgroup
\unexpanded{\StrSubstitute[#2]{#4}{\keyword}}
{\noexpand#1{\keyword}}}\x[\temp]
\global\let#4\temp
}
#4
}
\makeatother
%
使用方法如下:
\newcommand{\MyFormat}[1]{\emph{\LARGE#1}}
\def\KeyWords{one, two, three}
\def\MyText{this is one, next is two then three and one two three}
\FormatKeyWords[\MyFormat][1]{\KeyWords}{\MyText} % format the first occurrence of each keyword
如果有人感兴趣的话,这是简历制作器用于布局动态 CV 的项目。