Точная (CSS) гранулярность для ячеек таблицы HTML, экспортируемых через Emacs/Org Mode
Я пытаюсь получить более тонкий программный контроль (Emacs Lisp) над набором таблиц, экспортируемых из режима Org Emacs в HTML. [Эта задача является частью альтернативного подхода, принятого сообществом ErgoEmacs, где SVG используется для преобразования текстовых файлов в файл PNG, который иллюстрирует альтернативные эргономические макеты для использования Emacs.] Вкратце, таблицы являются абстракцией клавиатуры Apple BlueTooth. где каждая таблица режима Emacs/Org представляет ряд клавиш клавиатуры, таким образом, имеется шесть таблиц с 12-14 клавишами (столбцами) на строку.
В Emacs, в буфере режима org, моя абстракция отлично отображается с помощью мета-строки режима org, чтобы указать размер каждого столбца: | / | <c12> | <c7> | <c7> | ...
Сгенерированный вывод режима Org в Emacs является точным и мощным. При экспорте в HTML, используя CSS, лучшее, что я смог сделать (режим Org - версия 7, кстати), - это зафиксировать ширину каждой ячейки равным значению, которое приводит к неточному отображению. Я пытаюсь найти способ (используя CSS или что-то еще, что сохраняет рендеринг буфера Emacs), чтобы назначить индивидуальную ширину ячейки или ширину отдельных столбцов для экспортируемого HTML.
Предложения?
2 ответа
Если предложенного fniessen недостаточно, вы можете использовать :custom_id: special-table
свойство присвоить его рассматриваемой таблице, а затем поместить определения CSS в #special-table { ... }
учебный класс.
Но на самом деле, org-mode
уже создает некоторые идентификаторы (он выводит их из номеров разделов), так что вы всегда можете добраться до интересующей вас таблицы через что-то вроде #section-id table:nth-child(x) { ... }
править.
Если вы хотите генерировать правила CSS динамически, то один из способов сделать это - org-babel
блок кода, который отображает результаты с помощью :results html
на этом блоке. например, что-то вроде этого будет работать:
#+NAME: insert-css
#+BEGIN_SRC emacs-lisp :exports none :var nth-child=1
(print
(format
"<style type=\"text/css\">
#section table:nth-child(%s) { color: orange }
</style>" nth-child))
#+END_SRC
#+CALL: insert-css(nth-child=3) :results html
The code above produces this output:
# <style type="text/css">
# #section table:nth-child(3) { color: orange }
# </style>
Тем не менее, есть один небольшой недостаток более позднего подхода: хотя все браузеры понимают <style>
теги в теле HTML-документа, технически не допустимо помещать его туда. Конечно, если бы вы были супер-педантичными, у вас могла бы быть функция JavaScript, вставляющая CSS во время выполнения в более подходящее место, но я думаю, что это было бы излишним для этой задачи.
Я думаю, что вы могли бы (попытаться) достичь своей цели, добавив строку #+ATTR_HTML перед вашей таблицей. Там вы должны вставить спецификации CSS. Я ошибаюсь?