Таблица с границами в выводе HTML и LaTeX из исходного кода Markdown с Pandoc

Это пример таблицы в Markdown для Pandoc.

Simple tables look like this:

  Right     Left     Center     Default
-------     ------ ----------   -------
     12     12        12            12
    123     123       123          123
      1     1          1             1

Table:  Demonstration of simple table syntax.

К сожалению, он не добавляет границы.

Я мог бы закодировать его как таблицу HTML, но в этом случае он не будет работать в LaTeX.

  • Как я могу сделать таблицу с границами работающей как с выводом LaTeX, так и с HTML?

  • Если Pandoc не может выполнить эту работу, существует ли аналогичный инструмент, который может это сделать?


person antonio    schedule 04.12.2014    source источник


Ответы (2)


Следующий CSS добавляет таблицы в вывод HTML при использовании Pandoc:

table {
    margin-left: auto;
    margin-right: auto;
    margin-bottom: 24px;
    border-spacing: 0;
    border-bottom: 2px solid black;
    border-top: 2px solid black;
}
table th {
    padding: 3px 10px;
    background-color: white;
    border-top: none;
    border-left: none;
    border-right: none;
    border-bottom: 1px solid black;
}
table td {
    padding: 3px 10px;
    border-top: none;
    border-left: none;
    border-bottom: none;
    border-right: none;
}


/* Add border for the last row of the table.           */
/*      (Might be of use for table footnotes, later).  */
/* tr:last-child td { border-top: 2px solid black; }   */

Этот CSS взят из Marked.app. Я полагаю, что его можно загрузить с веб-сайт поддержки для приложения.

Вы можете указать Pandoc использовать пользовательский файл CSS с флагом --css. Что-то вроде этого должно работать:

pandoc -t html                      \
       --css=/path/to/custom.css    \
       -o /path/to/output/file.html \
        /path/to/markdown/file.md

Надеюсь, это поможет.

person sam    schedule 06.12.2014
comment
это не добавляет: извините, это была опечатка, а я хотел бы их. Пожалуйста, обновите свой ответ соответственно - person antonio; 06.12.2014
comment
Примечание для случайного читателя: он по-прежнему не показывает границы внутри таблицы, для этого можно было просто установить border-* переменных из none в, например, 1px. - person Hi-Angel; 10.09.2016

Вы можете сделать это с Pandoc. Но это требует немного больше усилий.

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

  1. Pandoc может распознавать необработанные фрагменты LaTeX, встроенные в Markdown [1]. Если целевой формат вывода — LaTeX или PDF, он передаст эти фрагменты без изменений в целевой документ.

    Поэтому, если вы знаете, как написать красивую таблицу в LaTeX, вставьте ее с помощью Markdown.

    Однако для вывода HTML этот код таблицы LaTeX будет игнорироваться. Это не проблема, потому что...

  2. Pandoc может распознавать фрагменты необработанного HTML, встроенные в Markdown [1]. Если целевой формат вывода — HTML, эти фрагменты будут переданы без изменений в целевой документ.

    Поэтому, если вы знаете, как написать красивую таблицу в HML, вставьте ее с помощью Markdown.

    Однако для вывода LaTeX/PDF этот код таблицы HTML будет игнорироваться. Это не проблема, потому что...

  3. Pandoc может распознавать фрагменты raw LaTeX, встроенные в Markdown [1].... (ааааа!, у нас это уже было. См. № 1.< /strong> выше... :)


Уловка: используйте pandoc в интерактивном режиме в окне терминала

Вот еще одна хитрость.

Если вы не знаете, с чего начать изучение LaTeX, Pandoc может научить вас кое-чему. Потому что вы можете использовать Pandoc интерактивно.

Для вывода LaTeX:

Это выглядит так:

  1. Введите в терминале: pandoc -t latex.
  2. Нажмите [RETURN].
  3. Ничего не произошло.
  4. Начните вводить фрагмент Markdown в терминал (как если бы вы вводили его в текстовом редакторе). Скажем, вы печатаете таблицу.
  5. Когда ваша таблица будет готова, нажмите [RETURN] еще раз, чтобы перейти на новую строку.
  6. Затем нажмите [CTRL]+[D].
  7. Вуаля!, в окне терминала появляется код LaTeX...

Глянь сюда:

$ pandoc -t latex   [RETURN]

  Right     Left     Center     Default
-------     ------ ----------   -------
     12     12        12            12
    123     123       123          123
      1     1          1             1

Table:  Demonstration of simple table syntax.

^D

Чтобы быть очень честным с вами: я не печатал таблицу Markdown. Я сжульничал. Я скопировал его из вашего вопроса и вставил в терминал. Последнее [^D], которое вы видите, это когда я нажимаю [CTRL]+[D].

Вот что тогда появилось в окне терминала:

\begin{longtable}[c]{@{}rlcl@{}}
\caption{Demonstration of simple table syntax.}\tabularnewline
\toprule
Right & Left & Center & Default\tabularnewline
\midrule
\endfirsthead
\toprule
Right & Left & Center & Default\tabularnewline
\midrule
\endhead
12 & 12 & 12 & 12\tabularnewline
123 & 123 & 123 & 123\tabularnewline
1 & 1 & 1 & 1\tabularnewline
\bottomrule
\end{longtable}

Это код таблицы LaTeX по умолчанию, сгенерированный LaTeX из ввода Markdown.

Теперь вы можете поискать в Google некоторые методы, (если вы еще не эксперт LaTeX), чтобы улучшить этот код, чтобы таблица выглядела лучше. Тяжелая работа уже сделана. (И если вы являетесь экспертом по LaTeX: все равно приятно не делать тяжелую работу самостоятельно, не так ли?)

Для вывода HTML:

Конечно, вы можете сделать то же самое для вывода HTML-кода таблицы в том виде, в каком его сгенерирует Pandoc. Смотреть:

$ pandoc -t html   [RETURN]

  Right     Left     Center     Default
-------     ------ ----------   -------
     12     12        12            12
    123     123       123          123
      1     1          1             1

Table:  Demonstration of simple table syntax.

^D

<table>
<caption>Demonstration of simple table syntax.</caption>
<thead>
<tr class="header">
<th align="right">Right</th>
<th align="left">Left</th>
<th align="center">Center</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="right">12</td>
<td align="left">12</td>
<td align="center">12</td>
<td align="left">12</td>
</tr>
<tr class="even">
<td align="right">123</td>
<td align="left">123</td>
<td align="center">123</td>
<td align="left">123</td>
</tr>
<tr class="odd">
<td align="right">1</td>
<td align="left">1</td>
<td align="center">1</td>
<td align="left">1</td>
</tr>
</tbody>
</table>

Разве это не мило?


[1] Возможно, вам придется сообщить Pandoc, что вы хотите использовать некоторые из его расширений при обработке входных данных Markdown: pandoc --from=markdown+raw_html+raw_tex+..., на случай, если он не будет работать с настройками по умолчанию. .)

person Kurt Pfeifle    schedule 20.04.2015
comment
Можно ли как-то превратить уценку в PDF (в которой уценка содержит встроенные фрагменты HTML) за один раз? - person CMCDragonkai; 26.10.2015
comment
@CMCDragonkai: если вы используете Pandoc, встроенный HTML передается только в форматы вывода на основе HTML (HTML, HTML5, EPUB, EPUB3, DZSlides, Slidy, Slideous, RevealJS,...) и игнорируется для вывода LaTeX или PDF. Я не знаю ни одного другого инструмента преобразования Markdown, который обработает ваш запрос. - person Kurt Pfeifle; 26.10.2015
comment
to pimp that code in order to make the table looking nicer -- Спасибо, что показали интерактивный режим - очень круто. Однако, что касается границ, я не вижу, как внутри уценки можно вставлять фрагменты LaTeX для установки вертикальных границ. Это было бы в строке \begin{longtable}[c]{@{}rlcl@{}}, правильно, с \begin{longtable}[c]{@{}|r|l|c|l|@{}} - часть вашего ответа LaTeX, наконец, бесполезна без этой помощи. - person Fuhrmanator; 03.06.2021