2016-01-14 2 views
1

Я пытаюсь использовать R Markdown для создания PDF-документа, и у меня возникают проблемы с использованием определенных тегов html. Например, R уценки документhtml-теги в документе R markdown, скомпилированном в pdf

--- 
output: pdf_document 
--- 

<pre> 
code1 
</pre> 

<code> 
code2 
</code> 

<pre><code> 
code3 
</code></pre> 

компилирует, чтобы дать

code2 

, когда требуемый выход является

code1 
code2 
code3 

с некоторым хорошим форматирования для code3. Но если я скомпилирую html (output: html_document вместо output: pdf_document в метаданных), проблема решена.

Я собираюсь с TexShop на Mac, используя двигатель ниже.

#!/bin/bash 
/Library/Frameworks/R.framework/Versions/Current/Resources/bin/Rscript -e "rmarkdown::render(\"$1\", encoding='UTF-8')" 

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

+1

Есть ли причина, по которой вы используете необработанный HTML для этого, когда Markdown имеет свой собственный способ разметки кода? – Waylan

+0

Я мог связать код по 2 набора из 3 обратных точек каждый, но мне не нравится эстетика, и я не контролирую стиль. – landau

+0

Что касается стандарта Markdown: отступы кода? – Waylan

ответ

3

Важно помнить, что формат 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.

+0

Вы полностью ответили на мой первоначальный вопрос. Тем не менее, я не доволен тем, как выглядит выход в формате PDF. И, к сожалению, я не всегда могу уйти с HTML, и иногда я хочу показывать код на других языках, кроме R. http://stackoverflow.com/questions/34815357/fenced-code-blocks-when-converting-r- Уценка-на-PDF имеет мой вопрос о последующих действиях. – landau