Asciidoctor: активировать замену в атрибутах CLI

#attributes #asciidoc #asciidoctor #antora

#атрибуты #asciidoc #asciidoctor #antora

Вопрос:

Кажется, что встроенный макрос pass не работает для атрибутов CLI.

Если я отрисовываю следующий фрагмент:

 :foo: crazy
:bar: pass:q,a[{foo} *world*]

hello {bar}
  

Я получаю то, что ожидаю: привет, сумасшедший мир

Но если я передам два атрибута в CLI ( asciidoctor-pdf -a foo=crazy -a bar='pass:q,a[{foo} *world*]' foo.adoc ), это не сработает:

приветственный переход: q, a[{foo} * мир *]

Что я могу сделать, чтобы это заработало?

Чтобы добавить немного контекста, я планирую использовать antora для написания документации ПО, которое я разрабатываю. Я хотел бы определить атрибуты в antora-playbook.yml или antora.yml , чтобы они действовали как «макросы latex».

Ответ №1:

Атрибуты, указанные в командной строке, обрабатываются как строки, а не как разметка Asciidoc. Это означает, что pass макрос не обрабатывается.

Однако по умолчанию атрибуты, указанные в командной строке, переопределяют атрибуты, указанные в документе. Итак, вы можете использовать свой документ, как описано выше, с включенными определениями атрибутов, а затем вы можете запустить:

 asciidoctor-pdf -a foo=stable foo.adoc
  

Определение в командной строке для foo атрибута переопределяет определение в документе, и результатом является hello stable world .

Комментарии:

1. Да, но моя точка зрения заключается не в том, чтобы иметь атрибуты, указанные в документе (чтобы «централизовать» их определения), поэтому я хотел бы также иметь «bar» в командной строке

2. Вы можете указать строковые значения для атрибутов в командной строке. Вы не можете указать разметку Asciidoc в качестве значения атрибута в командной строке. Для достижения желаемого потребуется изменение кода, и его может быть сложно реализовать без внесения неожиданного поведения в существующий рабочий процесс создания документа. Запрос на извлечение приветствовался бы.