Какой самый эффективный способ получить имя библиографической терапии из латексного файла с помощью команд оболочки Unix? - PullRequest
0 голосов
/ 06 июня 2010

Я пытаюсь написать сценарий оболочки, который компилирует источник латекса. Я хочу взять имя библиографического файла, который содержится в такой команде, как:

\ библиографию {имя файла}

Мне нужно сохранить «имя файла» в переменной оболочки. Мое решение этого (в tcsh) ужасно смущает:

набор биолиографии = grep -v -E "[[:blank:]]*%[[:blank:]]*" poltheory.tex | grep -E "\\bibliography{[A-Za-z0-9_\.]*}" | tail -1 | sed 's/\\bibliography//' | tr -d { | tr -d } | awk '{print $1}'

Это разбивается как:

  1. не показывать закомментированные строки в источнике латекса
  2. возьмите те строки, которые содержат действительный библиографический тег
  3. использовать только последний (в случае, если по каким-то причинам определено несколько)
  4. избавиться от фигурных скобок
  5. установить, что осталось для переменной оболочки.

Конечно, есть элегантный способ сделать это, что я пропускаю. Ты можешь меня удивить? У меня уже есть рабочая команда, так что это просто во имя красоты и волшебства раковины.

1 Ответ

1 голос
/ 07 июня 2010

Правило 1: всегда пишите сценарии оболочки, используя оболочки семейства Борна, не оболочки семейства csh.

Проще извлечь информацию из файла .aux. Здесь я буду использовать дополнительную функцию bash, чтобы отрубить .tex в конце имени файла:

#!/bin/sh
texfile="$1"
auxfile="${texfile%.tex}.aux"

grep '^.bibdata{' "$auxfile" | sed 's/.*{//;s/}.*//'
...