Intereting Posts
Каков надежный способ автоматизации загрузки FTP «новейшего файла в каталоге X»? Как заставить dhcpcd забыть старый статический адрес после редактирования dhcpcd.conf? Что делает карет в zsh? чтение записей из нескольких файлов Cron для удаления определенных файлов из определенного каталога Как эффективно разделить большой текстовый файл без разделения многострочных записей? Что нужно добавить в nsswitch.conf, чтобы показать пользователей и группы AD? В xterm (mintty, bash), как я могу открыть файл в существующем процессе vim? Жесткий диск автоматически не переходит в режим ожидания Создание суммарного обзора htop вложенный случай – почему нужно «;;» ставить после возможных команд, а не непосредственно позади «esac»? Emacs: разные пользователи, разные темы, один и тот же файл инициализации Как сортировать имена файлов в числовом порядке и измененный порядок времени? «ОШИБКА: отсутствие необходимых пакетов из профиля myprofile» при создании простого cd Как заблокировать входящие и разрешить исходящие письма для пользователя без ответа в Sendmail?

Выход PDF с правильными пробелами в примерах кода

Я использую rst2pdf и pandoc для преобразования следующего файла reStructuredText в PDF:

 This is a python example:: def main(): print("Hello World!") if __name__ == '__main__': main() And one for YAML:: server: name: ts0 location: paris 

хотя в двух программах используется другой движок для создания PDF ( pandoc даже требует установки TeX для этого), результатом является файл PDF, из которого вы не можете правильно вырезать и вставлять примеры кода:

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

В выделенном коде (зеленый фон) отсутствуют пробелы, потому что пустые пространства генерируются в этих файлах PDF с смещениями.

Скопируйте и вставьте результаты в уродливый форматированный код для многих языков, но для языков программирования, таких как Occam и Python, и для файлов конфигурации в YAML, это фактически меняет смысл. Если вам повезло, что на самом деле ломают вещи, и вы замечаете, но пример YAML, например, также правильный, без пробелов в начале строки, это просто имеет другое значение.

Эти примеры использования пространства-в-коде также происходят в документах PDF, созданных на сайте readthedocs.


Если вы берете вывод из:

 pandoc example.rst -o example.epub 

и просмотрите полученный файл одной страницы, вы можете скопировать и вставить код правильно. Если вы конвертируете этот example.epub с калибром (версия 2.55.0) через свой пользовательский интерфейс, вы получаете файл PDF, из которого вы можете правильно скопировать код (с пробелами), но полученный PDF-файл состоит из 3-х страниц.

Попытка конвертировать из командной строки:

 ebook-convert example.epub example.pdf 

приводит к исключению отображения, добавив опцию --old-pdf-engine выполняется преобразование, но у вас все еще есть 3-страничный PDF-файл вместо отдельной страницы.

Преобразование через HTML:

 rst2html example.rst > example.html; ebook-convert example.html example.pdf pandoc example.rst -o example.html; ebook-convert example.html example.pdf 

дает вам подходящий код:

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

, но при вставке нет пробелов для отступа, и даже пространство между Hello и World исчезает. Кроме того, на больших файлах вы получаете разрывы страниц в нежелательных местах, и макет потребует обширной настройки через таблицы стилей.

Я пробовал преобразование через .odt но это оказалось в файлах PDF с полностью невыбираемым текстом.


Учитывая следующие требования к выпуску PDF:

  • фрагменты кода, правильно выбираемые с пробелами
  • результаты, похожие по макету, в rst2pdf или readthedocs

есть ли инструменты командной строки для создания PDF-файла, начиная с файла .rst или какого-либо другого формата разметки?

Вы можете использовать следующий конвейер

txttopdf.sh:

 enscript -B -p- | ps2pdf -dCompressPages=false - - 

для создания PDF-файла, который сохраняет ведущее расстояние источника. Специальный параметр ps2pdf позволяет использовать часть содержимого промежуточного PostScript дословно, оставляя хорошо отступы текстовые объекты в PDF. Вы можете проверить это, открыв его с помощью обычного текстового редактора; часть контента находится где-то ближе к концу.

Однако, по-прежнему зависит от просмотра PDF независимо от того, отбрасывает ли эти пробелы или нет. Например, как и старый acroread , и они не позволяют мне выбирать ведущие пробелы в зрителе. Это то же самое, если я заменю пробелы неразрывным пространством (ISO-8859-1).

Таким образом, конвейер делает столько, сколько вы можете сделать в файле PDF, а затем вам нужно найти зрителя, который соблюдает интервал.