У меня есть документ со многими подобными таблицами. Я думал, что можно установить столбцы и заголовок этой таблицы в качестве атрибута
:table-params: width = "100%",cols = "12%,21%,67%",options = "header"
:table-header: |this |is |header
.table
[{table-params}]
|====
{table-header}
но это ошибка: table missing leading separator
. Похоже, asciidoc не может пост-рендерить значения атрибутов. pass
макрос тоже не помог
Я нашел решение с include
макросом с tag
.table-1
|====
// tag::table-header[]
|this |is |header
// end::table-header[]
.table-2
|====
include::example.adoc[tag=table-header]
Может быть, я что-то пропустил. Каков наиболее элегантный способ повторного использования размеченных частей в документе?
Атрибуты эффективно определяют строковые значения, которые можно повторно использовать в содержимом документа. Однако для определения атрибута таблицы требуется список аргументов, а не строка, которая выглядит как список аргументов.
Наиболее элегантным повторным использованием для разметки является макрос include::
, который работает так, как будто он вставляет указанный контент в место расположения макроса include::
.
Дополнительные сведения см. в документации: https://docs.asciidoctor.org/asciidoc/latest/directives/include/.
Чтобы избежать повторений, я бы использовал препроцессор Jamal.
https://github.com/verhas/jamal/
Jamal — это бесплатный инструмент с лицензией Apache v2.0, который я написал за последние несколько лет для решения именно таких проблем, как ваша.
С Jamal вы можете определить макросы и использовать их в коде позже, например:
{%@define tableParams= width = "100%",cols = "12%,21%,67%",options = "header"%}
{%@define tableHeader=|this |is |header%}
.table
[{%tableParams%}]
|====
{%tableHeader%}
который будет выглядеть в IntelliJ следующим образом: