Это кросс-пост от TeX , но он не получил никаких ответов. И поскольку я предполагаю, что проблема больше связана с моим пониманием регулярных выражений (или, лучше сказать, с их отсутствием), чем с самим LaTeX, StackOverflow, возможно, было бы лучшим местом для начала.
Я бы хотел использовать BibTool (который был написан в C, если это имеет какое-либо значение здесь), чтобы заключить некоторые строки в bib
-файл в фигурные скобки. Запись теста bib
выглядит следующим образом:
@Article{Cite1,
author = {Adelbert, A.},
date = {2020},
journaltitle = {A Journal},
title = {A title with just \textit{Test} structure and some chemistry \ce{CO2}},
number = {2},
pages = {1--4},
volume = {1},
}
Я создал следующий файл ресурсов BibTool:
resource {biblatex}
preserve.keys = on
preserve.key.case = on
rewrite.rule = {"\\\(.*{.*}\)" "{{\1}}"}
Предполагается, что rewrite.rule
будет следующим:
- Найти все строки в любом поле, которые начинаются с
\
, например \ce{}
, \textit{}
, et c. Это делается с помощью \\
в начале регулярного выражения. - Когда эта строка найдена, сохраните в группе следующее, обозначенное
\(\)
: случайная строка в начале, за которой следует {
, случайная строка, за которой следует }
; то есть строка textit{Test}
. - Запишите эту строку обратно в ту же позицию, но заключите ее в двойной набор фигурных скобок
"{{\1}}"
.
То, что она управляет так far:
- По-видимому, он находит все команды, начинающиеся с
\
. - . Сохраняет строки и записывает их обратно в файл.
Итак далеко, код возвращает следующее
@Article{Cite1,
Author = {Adelbert, A.},
Date = {2020},
JournalTitle = {A Journal},
Title = {A title with just {{textit{Test} structure and some chemistry {{ce{CO2}}}}}},
Number = {2},
Pages = {1--4},
Volume = {1},
}
Вы видите, что он находит строки и ставит {{
в начале каждой строки. К сожалению, это ставит }}
в конец поля, не строку, поэтому у меня теперь есть 6 фигурных скобок в конце поля заголовка. Скобки совпадают, только две из них должны быть после {{textit{Test}
, а не в самом конце. Я пробовал различные конструкции, такие как rewrite.rule = {"\\\(.*{.*}\)$" "{{\1}}"}
, rewrite.rule = {"\\\(.*{.*}\) ?$" "{{\1}}"}
, rewrite.rule = {"\\\(.*{.*}\)*$" "{{\1}}"}
, но все это не сработало.
При попытке вернуть \
в начало строки, используя rewrite.rule = {"\\\(.*{.*}\)" "{{\\\1}}"}
I получайте обратно \
, а также тысячи {}
, пока не получите ошибку Rewrite limit exceeded
.
Я не очень хорош с регулярными выражениями и буду рад любым комментариям.