Pandoc: нет переноса строк при преобразовании в HTML

#word-wrap #pandoc

#перенос слов #pandoc

Вопрос:

Я конвертирую Markdown в HTML следующим образом:

pandoc --columns=70 --mathjax -f markdown input.pdc -t html -Ss > out.html

Все работает нормально, за исключением того факта, что текст не переносится. Я пробовал разные длины столбцов, никакого эффекта. Удалены опции, не работает. Что бы я ни пробовал, HTML просто не переносится. Я ищу в трекере ошибок, но, похоже, нет никаких открытых ошибок, связанных с этой проблемой. Я также проверил документацию, но, насколько я мог понять, текст должен быть перенесен в строку… Итак, я наткнулся на ошибку?

Я использую pandoc версии 1.12.4.2.

Заранее спасибо за вашу помощь!

Ответ №1:

Pandoc переводит новые строки в HTML, чтобы исходный код было легче читать. По умолчанию он не вставляет <br> теги.

Если вы хотите сохранить разрывы строк при вводе markdown:

 pandoc -f markdown hard_line_breaks input.md output.html
  

Однако обычно лучшим подходом к ограничению ширины текста при открытии HTML-файла в браузере является адаптация HTML template ( pandoc -D html5 ) и добавление некоторых CSS, например:

 <!DOCTYPE html>
<html$if(lang)$ lang="$lang$"$endif$>
<head>
  <style>
  body {
     width: 46em;
  }
  </style>
...
  

Комментарии:

1. Принося огромные извинения за задержку, если это так, я снова спрашиваю: для чего подходит этот --columns вариант??

2. --columns Параметр указывает, сколько символов в строке исходного кода. В HTML разрывы строк в исходном коде не влияют на то, как текст отображается в браузере. Вместо этого вы могли бы использовать <br> теги для размещения разрывов строк, но лучше использовать CSS для описания того, как отображается содержимое (как я сделал в своем ответе внутри style тегов). Смотрите, например codecademy.com/en/tracks/web

3. (откройте результирующий HTML-файл в обычном текстовом редакторе, таком как Sublime, чтобы увидеть эффект различных --columns опций)

4. Хорошо, это все объясняет… но все же я бы не так интерпретировал README pandoc…

Ответ №2:

Неясно, какой текст должен быть перенесен, но этого не происходит, поскольку вы не предоставили образец.

Pandoc поддерживает несколько сценариев переноса строк в документах markdown.

Возможно, вы ищете расширение hard_line_breaks

Если это так, то ваша команда должна выглядеть так

pandoc --columns=70 --mathjax -f markdown hard_line_breaks input.pdc -t html -Ss > out.html

Я бы порекомендовал вам прочитать обо всех параметрах, связанных с markdown, и настроить pandoc в соответствии с вашим стилем ввода markdown

Комментарии:

1. Спасибо, что указали на это, это было полезно, но не совсем то, что я искал. Что это делает, так это помещает в HTML те же разрывы строк, которые существуют в оригинале markdown. Это означает --columns , что значение игнорируется. Есть ли способ фактически перенести текст до желаемой длины строки, или этот --columns параметр просто не должен использоваться с HTML?

2. @wmnorth Я не знаю, как columns это должно работать и чего именно вы хотели бы достичь. Если вы хотите получить HTML-абзац шириной 70 * em , вы можете добиться этого с помощью CSS, примененного к вашему HTML-документу. Также существуют некоторые специальные правила стиля представления, которые влияют на разрыв слов и разрыв строк и вызывают перепрошивку документа в средстве визуализации HTML, например w3schools.com/cssref/css3_pr_word-break.asp

3. Если вы действительно хотите обернуть вывод в 70 исходных символов, вы можете сначала запустить pandoc --columns=70 -f markdown -t markdown и передать это pandoc -f markdown hard_line_breaks , но это действительно неправильно (и будет выглядеть некрасиво). Цель hard_line_breaks состоит в том, чтобы сохранить семантические разрывы строк, например, в стихах; просто перенос выходных данных в соответствии с экраном (или более узким столбцом) должен быть оставлен браузеру / CSS.