使用 knitr 和 LaTeX 为已经索引的术语插入粗体文本
Inserting bold text with knitr and LaTeX for terms that have already been indexed
knitr
和 LaTeX
使用 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"
knitr
和 LaTeX
使用 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"