Важно помнить, что формат PDF не является HTML и ничего не знает о тегах HTML. Когда документ преобразуется в PDF, каждый фрагмент документа должен быть преобразован в соответствующий PDF-объект. Поэтому, когда вы вводите нестандартный необработанный HTML-код в свой документ, конвертер можно легко смутить.
Конечно, как работает конвертер под капотом, это может также повлиять на выход. Например, если инструмент, который вы используете, преобразует Markdown в HTML и затем преобразует этот HTML в PDF, тогда необработанный HTML может иметь больше шансов правильно отображаться. Однако, если инструмент идет прямо из дерева синтаксического анализа (списка токенов) в выходной формат, тогда он может ничего не знать о необработанном HTML (если он также не является парсером HTML). Дело в том, что использование raw HTML добавляет еще один потенциальный уровень сбоя при конвертации в PDF. Мое предложение состояло бы в том, чтобы избежать его, если это вообще возможно, когда вы отступаете для преобразования в PDF (помните, что Markdown первоначально предназначался для вывода только HTML).
Как выясняется, Markdown уже предлагает способ (или два, в зависимости от того, какую реализацию вы используете), чтобы разметка блоков кода: indented code blocks (и, возможно, защищенные блоки кода). Интересно, что HTML, который они выводят, такой же, как и необработанный HTML, который вы нашли для работы. Возможно, это должно дать понять, что две другие возможности, которые вы пробовали, недействительны.
На самом деле, HTML Spec довольно ясно, что блоки кода должны быть обернуты в теги <pre><code>
. Тег <pre>
является тегом уровня блока, поэтому его не нужно обертывать в любые родительские теги. Однако тег <pre>
не идентифицирует его содержимое как «код». Поэтому никогда не следует предполагать, что он содержит «код». С другой стороны, тег <code>
не является тегом уровня блока. Он должен быть обернут тегом уровня блока (например, <pre>
или <p>
...). И тег <code>
является единственным тегом, который маркирует контент как «код». Поэтому единственным допустимым способом разметки кода в HTML является обернуть его в теги <pre><code>
. Как оказалось, когда вы это делаете, это работает. Поэтому мой вывод состоит в том, что конвертор путается недействительным HTML и не работает (как следует).
Итак, в заключение, используйте собственные методы Markdown для маркировки кода или, если вы должны использовать необработанный HTML, придерживайтесь действительного HTML.
Есть ли причина, по которой вы используете необработанный HTML для этого, когда Markdown имеет свой собственный способ разметки кода? – Waylan
Я мог связать код по 2 набора из 3 обратных точек каждый, но мне не нравится эстетика, и я не контролирую стиль. – landau
Что касается стандарта Markdown: отступы кода? – Waylan