Точная (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. Я ошибаюсь?

Другие вопросы по тегам