автоматический отступ обернутого кода Python в Word

Я борюсь с Microsoft Word, чтобы правильно отобразить мой код Python, и мне нужна помощь.

Я пытаюсь вставить большое количество сценариев Python в Microsoft Word с текстом документации, написанным вокруг фрагментов. Некоторые из этих фрагментов Python состоят из нескольких строк, другие — более страницы. Поскольку документ теперь составляет около 500 страниц, по всему документу разбросано около 200 блоков фрагментов.

У меня есть стиль шрифта, который я создал для фрагментов. Таким образом, я могу изменить размер шрифта, цвет, стиль и т. д. для всех сразу. Но у меня большая проблема с переносом слов. Длинные операторы в Python заворачиваются в слова, что затрудняет их чтение, поскольку отступы теряются. Я могу успешно сделать отступ в обернутой строке уровня 1, используя «висячие отступы». Но я ничего не могу сделать с отступом уровня 2 или уровня 3, так как вложенные элементы имеют дополнительный отступ.

Пример (я использовал точки вместо пробелов, потому что они удалялись)

This is a statement
This is another statement
if (condition):
.........This is a third statement
.........This is a fourth statement
.........for loop : 
..................This is a fifth statement
..................This is a sixth statement
..................if (condition):
...........................This is a seventh statement

Представьте, что каждое выражение довольно длинное и переносится на следующую строку на странице слова. я получил

This is a statement
This is another statement
if (condition):
.........This is a third     
statement
.........This is a fourth     
statement
.........for loop:
.................This is
a fifth statement
.................This is a
sixth statement 

Как исправить это в ворде? Висячий отступ исправит отступы уровня 1 (операторы в условии if), но не отступы уровня 2 (операторы в цикле for).

Примечание. Я хотел бы использовать какую-то опцию, плагин или макрос в слове. Я не могу использовать редактор кода и копировать и вставлять код в rtf или другом формате. Даже если бы я сделал это 200 раз, чтобы заменить все фрагменты кода, в тот момент, когда я изменю размер шрифта в своем документе, все снова испортится. Другим вариантом может быть некоторая среда IDE, которая встраивает или связывает слово (без необходимости копирования и вставки) и позволяет изменять стиль и размер шрифта в своей собственной среде, которая будет автоматически обновляться при всех вхождениях в Word.

Пожалуйста, помоги, если можешь. Я искал как сумасшедший и не нашел ничего, что работает...


person Gary    schedule 22.04.2011    source источник
comment
Я не уверен, что понимаю недостаток форматирования, скажем, HTML (с помощью онлайн-инструмента форматирования) с последующей вставкой в ​​Word. Изменение размера шрифта после этого не должно вызвать никаких проблем.   -  person VoteyDisciple    schedule 22.04.2011
comment
Используйте латекс и пакет lstlistings, если хотите отформатировать код. Слово — это ад. Вы уже должны знать. С латексом вы можете изменить любой размер шрифта, который вы хотите, ваш код не будет двигаться. Черт возьми, вы программируете на Python, почему вы все еще думаете об использовании Word ???   -  person Joris Meys    schedule 22.04.2011
comment
Ну, я не знаю, как заставить Word не делать переносы строк, поэтому я не могу помочь... Но... есть еще одна вещь, на которую я просто хочу указать... - почему бы не кодировать с правилами PEP8 и не сделать кодовые строки максимальными Длина 79 символов — это должно поместиться на странице и предохранить Word от автоматического переноса.   -  person tmg    schedule 22.04.2011
comment
nmichaels, я пытался придерживаться слова, так как весь остальной текст отформатирован именно так, как мне нужно, все стили шрифтов настроены, сам индекс генерируется и т. д., но если lyx значительно облегчит эту задачу, я переключусь. Я посмотрю на lyx, он выглядит бесплатным и кажется более простым, чем изучение латекса. Спасибо за это.   -  person Gary    schedule 22.04.2011
comment
Йорис, я также изучу латекс и списки. nmichaels предложил lyx, так может быть проще. Я никогда не пользовался латексом. Word отлично справился со всеми остальными вещами, а некодовый текст связан со стилями шрифта, которые обновляют весь документ при изменении. Я полагаю, что латекс тоже может это сделать, поэтому я попробую латекс, как вы предлагаете.   -  person Gary    schedule 22.04.2011
comment
tmg, я поищу PEP8. Я рассматривал это (пришлось бы внести изменения во все 200+ фрагментов вручную). Я думал, что если я в какой-то момент увеличу размер шрифта, те же самые статусы больше не будут помещаться в одну строку и будут обернуты без отступов. Это те отступы, которые доставили мне очень трудное время. Если я не могу заставить их работать (используя латекс, ликс в соответствии с другими предложениями), я воспользуюсь вашим решением, это лучше, чем то, что я делаю сейчас. Спасибо   -  person Gary    schedule 22.04.2011
comment
Хоакин, это опечатка, я поставил слишком много точек, я отредактировал исходный пост и исправил   -  person Gary    schedule 22.04.2011
comment
Воти, вы говорите, что форматирование HTML как бы встраивает html в текстовый документ? Таким образом, отступ останется постоянным даже при изменении размера шрифта? Если это так, мне потребуется только сгенерировать все фрагменты в первый раз, и после этого будет мало обслуживания. Я посмотрю на это, спасибо   -  person Gary    schedule 22.04.2011
comment
Разве в Word нет стиля «как есть» или предварительно отформатированного? Вам также нужно будет сделать эти абзацы шрифтом фиксированной ширины. Используйте жесткие разрывы строк — еще один вариант.   -  person Keith    schedule 22.04.2011


Ответы (5)


1) Следуйте рекомендациям PEP-8 и сохраняйте строки ‹ 80 символов. Иногда это кажется очень сложным или неудобным. В этих случаях допускается до 90-95 символов. Более длинные строки, вероятно, являются результатом плохого дизайна кода или неправильно выбранных имен переменных. (Есть люди, работающие со стандартными размерами до 120 символов, но, вероятно, они не пытаются публиковать код в Word в портретном режиме).

2) Используйте моноширинный шрифт

3) Размер шрифта должен быть достаточно маленьким, чтобы обеспечить 80-95 символов в строке.

person joaquin    schedule 22.04.2011
comment
Я разместил этот вопрос 2 года назад и так и не выбрал правильный ответ (я не знал этикета StackOverflow). Так что я выбираю это сейчас, так как это то, что я в итоге сделал. Я в основном просто держал все свои утверждения менее 80 символов, и копирование и вставка в слово, казалось, работали нормально. Имейте в виду, я потратил много часов, просматривая все свои сценарии, переформатируя их таким образом и перезапуская их, чтобы проверить, не внес ли я каких-либо ошибок :) - person Gary; 05.05.2013

Вы пробовали использовать Word для создания текстового документа? Вы всегда можете преобразовать его позже.

person jathanism    schedule 22.04.2011
comment
джатанизм, я не понимаю, что вы имеете в виду. У меня сложилось впечатление, что текстовый документ не имеет форматирования. В любом случае мне придется вручную делать все отступы уровня 1, 2, 3 для всех фрагментов. И затем, если я изменю размер/стиль шрифта позже, все отступы, скорее всего, получатся. Позже мне придется внести изменения в размер и стиль шрифта, будь то в обычном тексте или в .docx, и отступ кода, вероятно, не останется неизменным когда это произойдет. Кроме того, большая часть некодового текста уже напечатана, отформатирована и ведет себя хорошо. Спасибо за предложение. - person Gary; 22.04.2011

Напишите свой код в редакторе кода с поддержкой Python с подсветкой синтаксиса. Сохраните свои фрагменты. Делайте скриншоты. Вставьте их в MS Word. Измените размер и обрежьте изображения по желанию.

Теперь все, что вам нужно сделать, это бороться с MS Word за обтекание изображений словами, и это битва, которую вы даже можете выиграть.

person Joris Timmermans    schedule 22.04.2011
comment
MadKeithV, я избегал использования изображений, поскольку речь идет о более чем 200 фрагментах на 500 страницах текстового документа. Это будет много изображений/скриншотов для работы. Также я не смогу изменить размер шрифта на скриншотах. Спасибо за предложение. - person Gary; 22.04.2011

Используйте docutils.

Вместо того, чтобы бороться с MS-Word (и другими WYSIWYG-редакторами), гораздо проще использовать docutils.

  1. Напишите свой документ примерно простым текстом. Вы будете использовать разметку RST, которая очень проста и легка.

  2. Запустите преобразование rst2html.py, чтобы создать красивые HTML-страницы из исходного кода.

  3. Запустите преобразование rst2latex.py, чтобы создать LaTeX из исходного кода. Существует множество инструментов, которые могут создавать PDF из LaTeX.

В этом случае фрагменты кода каждый раз обрабатываются идеально. Нет работы.

Если вы пишете что-то действительно большое и сложное, вам следует использовать для этого Sphinx. Это расширение для docutils с еще более интересными функциями разметки для фрагментов кода.

person S.Lott    schedule 22.04.2011
comment
SLott, Спасибо за это. Я никогда раньше не использовал docutils или латекс, но процедура, которую вы описали, звучит просто. Однако некодовый текст в моем документе очень хорошо отформатирован, и все связано со стилями шрифта, даже отдельные слова во многих предложениях, поэтому я могу потерять всю эту работу, если начну с обычного текста и прочитаю все 500 страниц. еще раз :( .. Я посмотрю разметку RST, может быть, что-то из форматирования, не относящегося к коду, можно сохранить? Я также рассмотрю sphinx в соответствии с вашей рекомендацией. Спасибо. - person Gary; 22.04.2011
comment
@Gary: Все форматирование без кода можно сохранить. Если для этого требуется слишком много классов расширения, считайте это признаком того, что вы перестарались со своим документом. Но Sphinx использует богатую семантическую разметку, и вы можете разработать отображение разметки на шрифты и стили презентации. - person S.Lott; 22.04.2011
comment
SLott, это здорово знать. Обязательно попробую на выходных или на следующей неделе. Большое спасибо за это. Даст вам знать, как это происходит. - person Gary; 22.04.2011

Я не использую слова, но в LibreOffice вы можете просто использовать форматирование абзаца — создать новый стиль абзаца для каждого уровня отступа (pycode, pycode_indent1...). Поместите все необходимое форматирование (моноширинный, без интервала между абзацами и т. д.) в стиле верхнего уровня и заставьте стили с отступом использовать его в качестве родителя. Затем просто добавьте соответствующие отступы к каждому из дочерних стилей. Это в основном та же идея, что и маркированный список с разной глубиной, но без маркеров. Затем выберите соответствующий стиль абзаца для каждой строки (подсказка: вы можете выбрать несколько несмежных строк, используя Ctrl + мышь в LibreOffice).

Конечно, таким образом вы должны делать это построчно, что может быть большой головной болью. Но это может сработать, если это всего лишь несколько фрагментов, которые вызывают проблемы.

person naught101    schedule 04.09.2014