Есть ли в командной строке С++ для конвертера PDF с подсветкой синтаксиса?
Мне нужно предоставить "Документы исходного кода с номерами строк", который по существу является только PDF-кодом исходного кода с подсветкой синтаксиса и номерами строк. Есть ли существующие инструменты командной строки для окон, которые я мог бы вызвать из script в качестве "версии выпуска сборки" script?
Сейчас я делаю это вручную с помощью VС++, который даже не является средой разработки кода для процессора TI и драйвером принтера PDF, который имеет всплывающее окно для каждого файла, который я печатаю.
Ответы
Ответ 1
Два синтаксиса, которые я использую, это enscript
и source-highlight
.
Первый может выводиться на PostScript (который вы можете преобразовать в PDF с использованием ps2pdf), второй производит вывод в формате HTML, LaTeX и других форматах.
Оба должны быть доступны через Cygwin
EDIT: В моей системе следующая команда будет печатать все файлы cpp в текущем поддереве.
find . -name "*.cpp" | xargs enscript -Ecpp -fCourier8
В то время как следующее приведет к созданию файла code.pdf
с тем же контентом
find . -name "*.cpp" | xargs enscript -Ecpp -fCourier8 -o - | ps2pdf - code.pdf
PS: и дайте --color=1
для вывода цвета и -C
для номеров строк.
find . -name "*.cpp" | xargs enscript --color=1 -C -Ecpp -fCourier8 -o - | ps2pdf - code.pdf
Ответ 2
Я использую это. Он генерирует .ps. Затем вы можете запустить ps2pdf.
# Copyright 2004 Rutger E.W. van Beusekom.
# Distributed under the Boost Software License, Version 1.0. (See
# accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
outfile=$1
shift
a2ps -1 --highlight=normal --pretty-print=cxx --line-numbers=1 -M a4 -L80 -g \
-o $outfile $* --prologue=color --right-title=%p. --left-title \
--left-footer --right-footer --header --medium=a4
Вы также можете использовать Doxygen с включенным браузером.
Существует также htmlize.el от Hrvoje Niksic для emacs.
Ответ 3
Я протестировал несколько альтернатив, и enscript имел лучший результат для печати исходного кода.
Итак, я написал этот bash script (требуется bash, enscript, ps2pdf, pdfjam) несколько минут назад, чтобы собрать все источники в текущем каталоге:
пример использования:./ script.sh *.h *.c
#!/bin/bash
test "x$1" == "x" && echo "usage: $0 <sourcefiles>" && exit 0
for f in "[email protected]" ; do enscript $f -o $f.ps -E -C ; done
for f in *.ps ; do echo ps2pdf $f ; ps2pdf $f && rm $f ; done
rm OUTPUT.pdf 2>/dev/null
pdfjam *.pdf && mv *pdfjam.pdf OUTPUT.pdf
echo
echo DONE:
echo OUTPUT.pdf
ВНИМАНИЕ: Этот script является плохим взломом и удалит *.ps и OUTPUT.pdf в текущем каталоге.
Предполагается, что все входные файлы находятся в текущем каталоге.