使用 knitr 和 LaTeX 为已经索引的术语插入粗体文本

Inserting bold text with knitr and LaTeX for terms that have already been indexed

knitrLaTeX 使用 RStudio 生成的我的 PDF 有 200 多个索引术语。我意识到最好将这些索引术语加粗以便我可以在 PDF 中找到它们,但为时已晚。似乎有一种方法可以自动加粗。

下面的小文本向量给出了 .Rnw 脚本中文本的示例,除了 'index' 前的反斜杠之前的附加转义码。对于多样性,在第二个字符串中的索引词之前有一个 space,在第三个字符串中有一个非索引示例。 None 我的索引词超过五个词。

text <- c("blah blah \index{words}words ramble on", "more blah more blah\index{space words} space words ramble on",
          "final blah\textbf{bold words} ramble on")

library(stringr)

我使用正则表达式和 stringr 包进行正面回顾以发现“\index{”并提取已编入索引的单词的努力失败了。我希望下面的正则表达式语句会说 "if you find the word 'index' is followed by an open brace, five or fewer words, and a close brace, extract the words." Nope

wd <- str_extract(string = text, pattern = "(?<=index{\w{1:5}})\w+{1:5}") 
Error in stri_match_first_regex(string, pattern, opts_regex = attr(pattern,  : 
  Error in {min,max} interval. (U_REGEX_BAD_INTERVAL)

谁能告诉我如何提取大括号中的单词?需要明确的是,我的最终目标是用 \txtbf{ } 将左大括号后面的单词(索引词)括起来。如果能指导一下那一步就更好了!

编辑 感谢 Wiktor Stribiżew 的评论,我希望所有索引词在文本中都是粗体。因此,第一个将是 "blah blah words ramble on",下一个将是 "more blah more blah space words ramble on",等等。.Rnw 文件将需要这样做,在第一个示例中,通过插入 \textbf{words} -- 与大括号中的单词。我不知道该怎么做。

考虑到您最后的评论:

I want to retain the index portion, but bold the word(s) that are indexed and come immediately after it. Thus, "blah blah \index{words}\textbf{words}"

我相信你需要:

(\index\{(\w+(?:\s+\w+){0,4})\})

并替换为 \textbf{}。参见 regex demo.

解释:

  • (\index\{(\w+(?:\s+\w+){0,4})\}) - 第 1 组捕获所有模式,以便我们可以用 </code></li> 引用它 <li><code>\index\{ - 文字字符序列 \index{
  • (\w+(?:\s+\w+){0,4}) - 第 2 组(称为 </code>)捕获: <ul> <li><code>\w+ - 一个或多个单词字符(替换为 \S+ 以匹配 1+ 个任何非空白字符)
  • (?:\s+\w+){0,4} - 零到四个序列:
    • \s+ - 1+ 个空格
    • \w+ - 1+ 个字符(可以替换为 \S+
  • \} - 文字 }
  • 参见R demo

    text <- c("blah blah \index{words}words ramble on", "more blah more blah\index{space words} space words ramble on","final blah\textbf{bold words} ramble on")
    gsub("(\\index\{(\w+(?:\s+\w+){0,4})\})","\1\\textbf{\2}", text)
    ## => [1] "blah blah \index{words}\textbf{words}words ramble on"                            
    ##    [2] "more blah more blah\index{space words}\textbf{space words}  space words ramble on"
    ##    [3] "final blah\textbf{bold words} ramble on"