Текстовый редактор для печати кода C ++

34

Я ищу редактор для печати (на бумаге) кода C ++. В настоящее время я учусь в инженерной школе, и инструктор попросил нас представить код на бумаге.

Он хочет имя + фамилия, номер класса (в заголовке), номер страницы внизу и зарезервированные слова, выделенные жирным шрифтом для каждой страницы!

На Windows это можно сделать с помощью notepadd++. Но я нахожусь на Linux, и я не нашел IDE или текстовый редактор, который работает. (Я уже пробовал SCITE, geditи Syntaxic)

loi219
источник
4
a2ps твой друг. Не торопитесь, чтобы настроить это.
Satō Katsura
5
Для таких запросов вы могли бы рассмотреть softwarerecs.stackexchange.com
Эрик Ренуф
30
Похоже, ваш учитель вложил средства в лесозаготовительную отрасль.
Энтон
10
Твой учитель хочет код ... на бумаге ?!
Легкость гонок с Моникой
8
@ loi219 "старый школьный" учитель или старый "школьный учитель", или оба? ;-)
user800

Ответы:

76

Что ж, если вы хотите пройти лишнюю милю, сделайте это в LaTeX и предоставьте файл PDF профессионального уровня. Вы не упомянули свой дистрибутив, поэтому я дам инструкции для систем на основе Debian. Та же самая основная идея может быть реализована на любом Linux, хотя.

  1. Установите систему LaTeX и необходимые пакеты

    sudo apt-get install texlive-latex-extra latex-xcolor texlive-latex-recommended
    
  2. Создайте новый файл (назовите его report.tex) со следующим содержимым:

    \documentclass{article}
    \usepackage{fancyhdr}
    \pagestyle{fancy}
    %% Define your header here. 
    %% See http://texblog.org/2007/11/07/headerfooter-in-latex-with-fancyhdr/
    \fancyhead[CO,CE]{John Doe, Class 123}
    
    \usepackage[usenames,dvipsnames]{color}  %% Allow color names
    
    %% The listings package will format your source code
    \usepackage{listings}
    \lstdefinestyle{customasm}{
      belowcaptionskip=1\baselineskip,
      xleftmargin=\parindent,
      language=C++,
      breaklines=true, %% Wrap long lines
      basicstyle=\footnotesize\ttfamily,
      commentstyle=\itshape\color{Gray},
      stringstyle=\color{Black},
      keywordstyle=\bfseries\color{OliveGreen},
      identifierstyle=\color{blue},
      xleftmargin=-8em,
      showstringspaces=false
    }        
    \begin{document}
    
    \lstinputlisting[style=customasm]{/path/to/your/code.c}
    
    \end{document}
    

    Просто убедитесь, что вы изменили /path/to/your/code.cпредпоследнюю строку, чтобы она указала на фактический путь к вашему C-файлу. Если у вас есть более одного файла для добавления, добавьте, \newpageа затем новый \lstinputlistingдля другого файла.

  3. Скомпилируйте PDF (это создает report.pdf)

    pdflatex report.tex    
    

Я протестировал это на своей системе с файлом примера, который нашел здесь, и он создает PDF, который выглядит следующим образом:

первая страница созданного PDF

Более подробный пример, который автоматически найдет все файлы .c в целевой папке и создаст проиндексированный PDF-файл, каждый из которых находится в отдельном разделе, приведен в ответе здесь .

Тердон
источник
17
Как только вы начинаете с LaTeX, вы не можете отпустить! Хотелось бы, чтобы я знал TeX в старшей школе ... (или они научили бы его альтернативе слову).
Kyslik
2
Я думаю, что LaTex будет установлен по умолчанию на большинстве систем, особенно в инженерной школе. Введите «which latex» в командной строке: если он возвращает путь, обычно / usr / bin / latex, вы можете пропустить шаг # 1. Кроме того, если выбранный вами редактор имеет приличный макроязык, вы можете запустить этот скрипт из редактора, используя, например, «gv --watch» для отображения прямого вывода.
jamesqf
4
@jamesqf Я никогда не видел систему с LaTeX, установленной по умолчанию. Да, ИТ-специалисты в некоторых школах, возможно, установили его, и могут быть специализированные дистрибутивы Linux, которые имеют его по умолчанию, но подавляющее большинство систем не будет.
Тердон
3
@terdon - Я никогда не видел установки в инженерном отделе без LaTeX. Это очень важно для тех, кому нужно печатать продукцию.
Тоби Спейт
1
@terdon: «По умолчанию» или выбрано при установке. Я не припоминаю, чтобы я делал что-то особенное, чтобы получить LaTeX на своих системах (OpenSuSE), но с момента последней установки прошло довольно много времени. В любом случае, проверка проста.
jamesqf
29

Я бы обычно использовал enscript: что-то вроде

$ enscript --highlight=cpp
           --header='|Real Name|Class 101'
           --footer='|Page $% of $=|'
           -poutput.ps *.cpp

будет началом - это записывает постскриптум в вывод output.ps, так что вы можете просмотреть и перезаписать его, пока вы работаете с конфигурацией, а затем распечатать его, как только вы будете довольны. Смотрите man-страницу для более широких возможностей.

РЕДАКТИРОВАТЬ, чтобы заставить нижний колонтитул работать правильно, было немного трудно с надписью - я никогда не замечал, потому что я никогда не требовал этого. Если вы сохраните этот файл в ~/.enscript/so.hdr(вам, вероятно, нужно создать каталог), вы фактически получите требуемый вывод с

$ enscript --highlight=cpp
           --header='|Real Name|Class 101'
           --footer='|Page $% of $=|'
           --fancy-header=so
           -poutput.ps *.cpp

дающий

введите описание изображения здесь


Грубо говоря,

  • LaTeχ - это лучшее качество и большая работа по настройке,
  • enscript или a2ps являются промежуточными как по качеству, так и по работе,
  • :hardcopyКоманда Vim проста, но не так гибка, и
  • ручное выделение синтаксиса в редакторе, не поддерживающем код, - много усилий для плохой отдачи.
Бесполезный
источник
Это абсолютно то, что я ищу. Большое спасибо!
loi219
Я второй emscript. Он имеет множество вариантов и дает очень хорошие результаты.
Рубик
9

Вы можете использовать :TOhtmlкоманду в vim. Это отображает то, что вы видите (т.е. подсветку синтаксиса) как html. Оттуда работает веб-браузер, который может печатать в формате PDF, так как обычно вы можете настроить содержимое верхнего / нижнего колонтитула.

Вероятно, это похоже на :hardcopyкоманду, упомянутую Useless, но я не могу проверить в моей системе сейчас.

Другая возможность - это печать из QtCreator, однако, похоже, нет способа установить верхние / нижние колонтитулы.

тень
источник
4

Geany - это простая среда разработки, которая дает вам много вариантов того, что идет в заголовке.

Зарезервированные слова можно манипулировать в меню параметров, но выделение кода делает это для стиля notepad ++. (вам может потребоваться скопировать / загрузить цветовые схемы в вашу папку "/home/$USER_NAME/.config/geany/colorschemes/", чтобы получить нужную вам)

Очень просто и лично мне очень нравятся номера строк и формат, который он печатает.

Также Geany работает на Windows и Linux.

Страница 1

Страница 2

Страница 3

Джо
источник
2

Поскольку вы запрашиваете редактор , вы можете печатать напрямую из Emacs, используя ps-print-buffer.

Верхние и нижние колонтитулы находятся в группе Customize ps-print-headers.

Предполагая, что вы используете font-lock, у вас, вероятно, есть подсветка синтаксиса, которая требуется. При необходимости его можно настроить с помощью ps-extend-faceфункции.


Сказав это, я по-прежнему рекомендую вам использовать подходящий инструмент «перемалывания», такой как листинг a2ps, enscript или LaTeX +.

Тоби Спейт
источник
1

Для полноты и, хотя я бы не рекомендовал такое решение, в lpпрограмме есть -o prettyprintопция, которая может делать подсветку синтаксиса.

Вы можете использовать его, например, так:

lp -t "Name Surname | Class" -o document-format=application/x-csource -o prettyprint path/to/code.cpp

Здесь я использовал -t(заголовок), чтобы установить заголовок. Я не могу изменить нижний колонтитул (но номер страницы отображается вверху). Вы можете установить тип файла с помощью опции -o document-format (список допустимых значений должен быть в /usr/share/cups/mime/mime.typesили, может быть /etc/cups/mime/mime.types), но если ваш файл имеет правильное расширение, в этом нет необходимости. Кроме того, подсветка синтаксиса далека от совершенства.

lgeorget
источник
1

Вам просто нужен LibreOffice Writer .

Вставьте свой код C / C ++.

Найдите слова и выделите жирным шрифтом все ключевые слова C ++.

Вы можете найти их здесь: http://en.cppreference.com/w/cpp/keyword

Чтобы найти слово Нажмите Ctrl + F. Выберите «Match case» и нажмите «Find All» (как показано на скриншоте).

введите описание изображения здесь

После этого вам нужен верхний и нижний колонтитулы с вашим именем и номером страницы.

РЕДАКТИРОВАТЬ: ( Кристоф Стробб прокомментировал :)

Для раскраски кода имеется расширение LibreOffice: Code Colorizer Formatter . (Я еще не проверял это.)

GeoMint
источник
41
Eww, ручная подсветка синтаксиса.
бесполезно
У тебя есть идея?
loi219
7
Кроме того, eww, код с шрифтом переменной ширины :(
кот
2
Для раскраски кода имеется расширение LibreOffice: Code Colorizer Formatter . (Я еще не проверял.)
user800
1
Это выглядит больно
Джо
0

Я использовал Nedit много лет назад, когда работал в системе Solaris, так как мне нравился графический интерфейс. Я вижу, что это все еще вокруг. Проверьте это.

Калпана Н.
источник
-2

В прошлом, когда KDE3 был все еще большой вещью, я использовал Kate, потому что для текстового редактора он действительно выдает лучший результат. Сегодня я бы пошел с латексом для более встраиваемого решения, со списком пакетов. Этот пакет не для цветной печати, но на лазерном принтере цвета не являются преимуществом.

Arne
источник
2
Это действительно не отвечает на вопрос, не так ли?
контррежим
На самом деле это отвечает на вопрос. Ответ таков: «Посмотри на Кейт, в прошлом мне это показалось хорошим»
Арне