Таблица Asciidoc для значений счетчиков и текстовых ссылок

Я создаю asciidoc, как описано ниже:

Start of document 

* R{counter:recom}: sentence1 
...
* R{counter:recom}: sentence2
...
* R{counter:recom}: sentence3

End

Примечание. R{counter:recom} из asciidoc будет отображаться как R1 R2 R3 в результирующем документе.

Мне нужно создать таблицу в начале документа, которая будет ссылаться на счетчики и текст из документа, как описано ниже:

Start of document 

|Ref#|text from the document
|R1|sentence1
|R2|sentence2
|R3|sentence3

throughout the doc: 

* R{counter:recom}: sentence1
...
* R{counter:recom}: sentence2
...
* R{counter:recom}: sentence3

End

Здесь есть 2 неизвестные вещи:

  1. Как я могу сослаться на счетчик и часть предложения из asciidoc R1 sentence1 в таблице вместе или по отдельности, чтобы, если я изменю его в документе, он был изменен в таблице?

  2. Как сослаться на значения счетчика в таблице, чтобы они работали как ссылки на фактическое значение счетчика R1 в документе?

Не уверен, что для этого существует готовая конструкция, и я не понял, как этого добиться с помощью оператора anchor или include.


person Anup    schedule 01.08.2019    source источник
comment
Я думаю, что это может быть за пределами возможностей AsciiDoc. Даже если вы можете отслеживать скоординированную пару счетчиков, вы не можете выразить их как часть более поздней оценки атрибута. Казалось бы, это случай для предварительного создания списка атрибутов R<n> и sentence<n> заранее и их приема.   -  person Brian D    schedule 01.08.2019


Ответы (2)


Ниже приведен эксперимент с атрибутами. Он отвечает следующим требованиям:

  • если вы измените предложение в атрибуте, оно будет изменено и в таблице, и в документе
  • таблица и документ будут содержать один и тот же номер
  • таблица к элементу в документе
:ref-a: R{counter:recom}
:sen-a: sentence1

:ref-b: R{counter:recom}
:sen-b: sentence2

:ref-c: R{counter:recom}
:sen-c: sentence3

|===
|Ref#|text from the document
|<<link-a>>|{sen-a}
|<<link-b>>|{sen-b}
|<<link-c>>|{sen-c}
|===

throughout the doc:

* [[link-a,{ref-a}]]{ref-a}: {sen-a}
...
* [[link-b,{ref-b}]]{ref-b}: {sen-b}
...
* [[link-c,{ref-c}]]{ref-c}: {sen-c}
...

рендеринг этого с помощью

Asciidoctor 2.0.10 [https://asciidoctor.org]
Runtime Environment (jruby 9.2.7.0 (2.5.3) 2019-04-09 8a269e3 Java HotSpot(TM) 64-Bit Server VM 25.161-b12 on 1.8.0_161-b12 +jit [mswin32-x86_64]) (lc:CP850 fs:Windows-1252 in:CP850 ex:CP850)

or

Asciidoctor PDF 1.5.0.beta.1 using Asciidoctor 2.0.10 [https://asciidoctor.org]
Runtime Environment (jruby 9.2.7.0 (2.5.3) 2019-04-09 8a269e3 Java HotSpot(TM) 64-Bit Server VM 25.161-b12 on 1.8.0_161-b12 +jit [mswin32-x86_64]) (lc:CP850 fs:Windows-1252 in:CP850 ex:CP850)

дисплеи

скриншот вывода asciidoctor

Альтернатива помещению предложения в атрибут: предполагая, что каждая глава описана в отдельном файле, вы можете использовать оператор включения, который включает только первую строку файла для таблицы с использованием include::filename.txt[lines=1], а затем включает полный файл внутри документа. . Дополнительные сведения см. в разделе Включение диапазонов по строкам в документации Asciidoctor (вы также можно использовать теги для указания содержимого таблицы).

person ahus1    schedule 01.08.2019
comment
Первое решение работает нормально, за исключением того, что текст, замененный для <<link-1>>, равен [link-a] с подчеркиванием, а не R1. Тем не менее, он работает как ссылка, но я также получаю предупреждение при создании PDF как asciidoctor: WARNING: invalid reference: link-a. Используемые версии: Asciidoctor PDF 1.5.0.alpha.16 using Asciidoctor 1.5.8 Runtime Environment (ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]) (lc:UTF-8 fs:UTF-8 in:UTF-8 ex:UTF-8) - person Anup; 02.08.2019
comment
@Anup - я добавил точные версии в пост. Как Asciidoctor 2.0.10, так и Asciidoctor PDF 1.5.0.beta.1 не показывают никаких предупреждений или неработающих ссылок. - person ahus1; 02.08.2019

Что сказал @ahus1.

Или, если вы можете преобразовать строки счетчика в заголовки разделов, то это легко:

= Document

[cols="a"]
|===
| <<first>>
| <<second>>
| <<third>>
|===

...

[[first]]
== R{counter:recom}: sentence 1

...

[[second]]
== R{counter:recom}: sentence 2

...

[[third]]
== R{counter:recom}: sentence 3

...


End
person eskwayrd    schedule 01.08.2019
comment
Да, я думал об этом, но у меня уже есть разделы и оглавление, в котором они перечислены. Спасибо за предложение. - person Anup; 02.08.2019