Записать все имена .tex файлов из папки в файл, каждый внутри идентичной оболочки - PullRequest
1 голос
/ 15 марта 2012

У меня есть папка с файлами .tex, и я хотел бы записать эти имена в файл, каждый из которых находится в одной и той же оболочке.

Например, допустим, у меня есть папка с тремя файлами .tex A.tex, B.tex и C.tex, хотя имена файлов не соответствуют простому шаблону.Эти файлы .tex являются таблицами, и я хотел бы обернуть их, чтобы получить \begin{table} \input{A.tex} \end{table} и т. Д.

Моей первой мыслью было, что может быть решение LaTeX, но, глядя на TeX SE, кажется, что этоможет быть лучше обработано в Vim (в частности, третий ответ здесь ).Или эта задача лучше решается с помощью Perl или какого-либо другого языка сценариев?(Я ограничил знание Perl, но это побудило бы меня узнать больше).Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

В случае имен файлов, которые не содержат символов новой строки, проблема может быть легко решена с помощью скрипта Vim:

:call append('.', map(split(glob('*.tex'), '\n'), '''\begin{table} \input{''.v:val.''} \end{table}'''))

или

:let fmt = '\begin{table} \input{%s} \end{table}'
:call append('.', map(split(glob('*.tex'), '\n'), 'printf(fmt, v:val)'))

В вышеприведенных командах используется glob() функция для сбора списка имен файлов, соответствующих заданному шаблону.Результирующий набор имен файлов представляется в виде строки, содержащей пути, разделенные символами новой строки.Используя функцию split(), строка разбивается на список, который обрабатывается функцией map() для форматирования имен файлов в соответствии с желаемым текстовым шаблоном.Затем строки из этого списка вставляются ниже текущей строки с помощью функции append().

Еще один способ заполнить список имен файлов в буфере - вставить вывод команды system directory-list через :read! command,

:r!ls *.tex

Чтобы отформатировать список по мере необходимости, выполните

:'[,']s/.*/\\begin{table} \\input{&} \\end{table}/

сразу после выполнения предыдущей команды.

1 голос
/ 15 марта 2012

Хотя vim-сценарии могут справиться с этим, в Bash все будет намного проще.

for file in *.tex; do
    echo "\\begin{table} \\input{$file} \\end{table}" >> tables.Tex
done

Теперь это предполагает, что ни одно из имен файлов не имеет символов, которые должны быть экранированы для Tex; если они это сделают, вы можете сделать это в vim (:%s/find/repl/g) или с заменой оболочки (${file//find/repl}).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...