Есть ли в командной строке С++ для конвертера 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 в текущем каталоге. Предполагается, что все входные файлы находятся в текущем каталоге.