Intereting Posts
Не удалось apt-get после изменения настроек брандмауэра Где документированы флаги -t и -u netstat? Изменение измененной даты файла в зависимости от даты в имени файла Переменная PATH для anaconda в Fedora Почему невозможно подключиться к моему серверу с помощью RSA с устройства Ubuntu? Поиск совпадающих файлов с подстановочными знаками без использования find в сценарии bash Отключить завершение подстроки в zsh Сгруппированная агрегатная утилита (например, SQL GROUP BY)? Список исключений из списка больше не работает после обновления до Debian stretch Захват журналов устройств между конкретным временем Как найти файлы, содержащие новую строку в имени файла? Могу ли я вводить корейский язык с помощью fcitx под Linux mint 17.2 Cinnamon? Как я могу переопределить файл / etc / hosts на уровне пользователя? Получение строк из файлов с определенным расширением Создание базы списка слов по возможным номерам / символам через Crunch в Kali Linux

Как создать список и подсчитать ключевые слова LaTeX в исходном файле?

Я новичок, пытаясь сделать списки (и, в конечном счете, подсчитать и сделать статистику) ключевыми словами LaTeX, появляющимися в некоторых документах. В основном ключевое слово LaTeX «valid» можно идентифицировать с помощью:

  1. Тот факт, что он не начинается с знака «%» (он будет комментировать, поэтому не используется)
  2. Он начинается с обратной косой черты.
  3. За ним следует либо левая фигурная скобка (или левая скобка, если есть варианты).

Я понимаю, что существуют и другие «особые» случаи: ключевые слова, за которыми следуют ничто (пробел), или другое ключевое слово, но они относительно редки, и я не обращаю внимания на неточность. Моя основная цель – получить в конечном итоге грубую идею о количестве разных ключевых слов в различных типах документов.

Я пробовал различные способы использования awk, но не мог заставить ничего работать … Я привязал MWE (бессмысленный и не функциональный!) Файл LaTeX для справки.

\documentclass[a4paper]{scrreprt} % Mode production \usepackage[T1]{fontenc} \renewcommand{\thechapter}{\Alph{chapter}} \fancypagestyle{FrontPageTestReportStyle} \fancyfoot[C]{} \newcommand{\WaterMark}[1]{% \begin{tikzpicture}[remember picture,overlay] \node[rotate=60] \end{tikzpicture}% \begin{figure}[H] \centering \begin{minipage}[b]{.46\textwidth} \centering \includegraphics[width=#2]{#3}\caption {#4} \end{minipage} \caption {#3} \end{figure} \raggedright \begin{tabular}{|c|cS|cS|} \hline \multirow{2}{*}{Part number}&\multicolumn{2}{c|}{Cavity A}&\multicolumn{2}{c|}{Cavity B}\\ \end {tabular} \end{table} 

Вот сценарий, который разбивает команды LaTeX в исходном файле. Он разделяет комментарии, начинающиеся с % . Он выводит все команды с ведущим \ и всеми именами среды.

 sed -e 's/^\(\(\)*\)%.*/\1/' \ -e 's/\([^\\]\(\\\\\)*\)%.*/\1/' \ -e 's/\\./\n&/g' | sed -n -e 's/^\\begin *{\([^{}]*\)}.*/\1/p' \ -e 's/^\\end *{.*//' \ -e 's/^\(\\[@A-Za-z][@A-Za-z]*\).*/\1/p' \ -e 's/^\(\\[^@A-Za-z]\)/\1/p' | 

Пояснения:

  1. Первый sed pass добавляет новую строку перед каждой обратной косой чертой. Первые два выражения отменяют комментарии, сохраняя \% но все же оставляя комментарии, которым предшествует \\ .
  2. Во втором sed pass первое выражение печатает имена среды из команд \begin а второе выражение игнорирует \end команды. Третье выражение печатает команды, имена которых являются буквами, а четвертое выражение печатает команды, имя которых является символом.

Этот скрипт не обрабатывает стенографические среды.

Это звучит как вариация по этому вопросу .

Поэтому я буду работать над этим ответом:

 for w in `cat test.tex`; do echo $w; done|sort|egrep '\\[az]*{'|uniq -c 1 A}&\multicolumn{2}{c|}{Cavity 1 \begin{figure}[H] 1 \begin{minipage}[b]{.46\textwidth} 1 \begin{tabular}{|c|cS|cS|} 1 \begin{tikzpicture}[remember 

Регулярному выражению может потребоваться некоторая работа, но это должно заставить вас начать.