Я пытался извлечь все цитаты из файла LaTeX, то есть иметь возможность извлечь все, что находится между двумя фигурными скобками после \ cite (то есть, \cite{bla,blo}
даст мне bla
и blo
),Есть несколько угловых случаев: \cite{}
может содержать одну или несколько цитат, разделенных запятой (и нет запятой, если есть только одна цитата), а команда \cite{}
может занимать несколько строк.
До сих пор я придумал следующий вкладыш, который хорошо работает:
<file.tex grep -oPz "(?s)(?<=\\\\cite{).[^}]*?(?=})" | tr '\n\0,' ' \n\n' | tr -d '[:blank:]' | sort | uniq
Однако мне было интересно, можно ли будет сделать это только одним инструментом, будь то sed, grep или awk. Я думаю, что было бы легче сделать это в awk (потому что часть sort | uniq может быть легко выполнена в awk, но я застрял в извлекающей части).
Любые предложения приветствуются.
Вот контрольный пример:
Aenean consequat \cite{acitation} auctor varius. Pellentesque varius,
sapien quis faucibus rhoncus, nunc nisl sagittis erat, ac varius magna
quam eu est. Pellentesque \cite{a citation with spaces is considered
valid yes but does not produce the correct output but it is not a problem
because those are not valid in LaTeX} congue maximus efficitur. Quisque
ac aliquam nisi. Nullam sit
amet auctor metus, nec varius ipsum. Proin vel lacus sed nisl auctor
porttitor. Sed id turpis pretium, rhoncus nisi eu, dictum ipsum. Nulla
facilisi. Vestibulum sed congue \cite{some.citation.here, anotherone}
metus, vitae \cite{onecitation,
thenexthere} scelerisque sem.Vestibulum eget gravida ante. Suspendisse
consequat libero eget mauris cursus, sed blandit est euismod. Pellentesque
porta vitae dolor blandit lacinia. Nulla sit amet rutrum velit, in mollis
sem. Nunc gravida consectetur \cite{acitation} feugiat.
и вывод
acitation
acitationwithspacesisconsideredvalidyesbutdoesnotproducethecorrectoutputbutitisnotaproblembecausethosearenotvalidinLaTeX
anotherone
onecitation
some.citation.here
thenexthere
Порядок вывода не имеет значения, поскольку каждая цитата указана только один раз. Результат для
\cite{a citation with spaces is considered
valid yes but does not produce the correct output but it is not a problem
because those are not valid in LaTeX}
- неопределенное поведение, так как он не должен появляться в действительном документе LaTeX.