如何创建接受纯文本并生成格式化文本的预处理命令(基于可配置选项)

如何创建接受纯文本并生成格式化文本的预处理命令(基于可配置选项)

寻找在 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 的项目。

相关内容