h0rr0rr_drag0n 04.08.2009 20:33
Скрипты на bash — Скрипт для преобразования Сишных исходников в красиво оформленный PDF файл.
Возникла у меня потребность перевести много исходников, написанных на C, в PDF файл, чтобы все это потом можно было распечатать на принтере. Хотелось иметь возможность выбора размера шрифта, нумерацию строк и подсветку ключевых слов.Задумка была осуществлена при помощи LaTeX’а и скрипта на bash’е. Скрипт принимает один обязательный параметр – размер шрифта; список параметров можно узнать запустив скрипт без параметров.
Работа самого скрипта довольно проста – формируется латеховский исходник и в него включаются все исходные файлы из текущего каталога, затем удаляются все временные файлы, созданные в процессе работы.
Основная сложность была в формировании красивых листингов в латехе. Для этого я использовал пакет listings, который, как известно, весьма плохо работает с русскими комментариями в юникоде – он попросту сливает русские слова между собой: /* этокомментарийдемонстрирующийнаглядновышеозвученнуюпроблему */. В документации по пакету (стр. 55) было приведено решение этой проблемы, но возникла другая – теперь комментарии обрабатываются непосредственно LaTeX’ом и соответственно в них не должно символов наподобие “creat_pckt()” или “”. Эту новую проблему я, к сожалению, решил лишь частично – заменил во всем тексте программы символ “_” на “–”. Остальные запрещенные символы приходится править руками. Если придумать, как заменить эти запрещенные символы на “съедобные” латехом, причем только в комментариях (наподобие /* */, комментарии могут быть как однострочными так и многострочными), то проблема будет полностью решена.
Но, в принципе, и без этого скрипт работает для меня более менее удовлетворительно. Привожу его код:
lomereiter 04.08.2009 21:28 #
+ 0 -
А что, если забить на extendedchars=\true, вместо utf8x написать koi8-r и просто прогонять файлы через iconv в однобайтовую кодировку?
Короче, уже пофиксил: http://s-c.me/GA (только там у pdflatex /dev/null убран в целях отладки).
А вообще — полезная шняга, спасибо :)
А вообще — полезная шняга, спасибо :)
Так уже гораздо лучше! Немного подправил скрипт, чтобы он работал и с Makefile'ами, а также не перекодировал в KOI8R все файлы в текущем каталоге, а только нужные: http://pastebin.ca/1518237
а можно скрин работы скрипта, а то красота ПДФа готового смутно представляется
Залил сам пдф. Ссылка: http://www.2shared.com/file/7010609/ae7eec0f/termemu.html
Хорошо бы ссылку на готовый пдф ещё, чтобы все прям соблазнились! :)
Что-то я снова намудрил с комментом - см. ниже ссылку на файл.
Вот: http://www.2shared.com/file/7010609/ae7eec0f/termemu.html .
Соблазняйтесь на здоровье!
Соблазняйтесь на здоровье!
а сиськи в шапке ваши или мне стоит проверять рабочий комп на вирусы уже? :)
Мои. Нет, в смысле не мои личные, но я их вставил туда =)).
Это не некробамп, это напоминашка себе на будущее.
Выжечь. На спине разработчиков listings калёным железом.
\usepackage{fontenc}
\usepackage{inputenc}
\usepackage{listings}
\lstset{extendedchars=true,language=C,basicstyle=\footnotesize,
tabsize=2,showstringspaces=false,
inputencoding=cp1251,escapebegin=\begin{cyr},escapeend=\end{cyr}}
\begin{document}
\lstinputlisting{src/myfile.c} % myfile.c д/б в cp1251, есичо, iconv в помощь
\end{document}
Выжечь. На спине разработчиков listings калёным железом.
Милое ли дело - завтра защита, а я полночи потратил на оформление листингов >__<