Чтобы внести несколько исправлений в файл .tex, сгенерированный Bookdown, мне нужно заменить вхождения }{
на ,
, когда он используется в цитате, т.е.
s <- "Text.\\autocites{REF1}{REF2}{REF3}. More text \\autocites{REF4}{REF5} and \\begin{tabular}{ll}"
Должен стать
"Text.\\autocites{REF1,REF2,REF3}. More text \\autocites{REF4,REF5} and \\begin{tabular}{ll}
Поскольку мне нужно сохранить ссылки, я пытался просмотреть обратные ссылки, но я не могу понять, как это правильно, потому что количество групп, которые нужно сопоставить, заранее неизвестно. Кроме того, я не могу сделать stringr::str_replace_all(s, "\\}\\{", ",")
, потому что }{
встречается и в других местах документа.
Мой лучший подход на данный момент - использовать функцию «смотреть в прошлое», чтобы выполнять замену только в том случае, если вхождение происходит после \\autocites
, но тогда я не могу получить обратные ссылки и правильную группировку:
stringr::str_replace_all(s, "(?<=\\\\autocites\\{)([:alnum:]+)(\\}\\{)", "\\1,")
[1] "Text.\\autocites{REF1,REF2}{REF3}. More text \\autocites{REF4,REF5} and \\begin{tabular}{ll}"
stringr::str_replace_all(s, "(?<=\\\\autocites\\{)([:alnum:]+)((\\}\\{)([:alnum:]+))*", "\\1,\\4")
[1] "Text.\\autocites{REF1,REF3}. More text \\autocites{REF4,REF5} and \\begin{tabular}{ll}"
Возможно, мне не хватает какого-то совершенно очевидного подхода, поэтому я надеюсь, что кто-то может помочь.