Номер страницы оглавления XSL-FO с выравниванием по левому краю, если заголовок страницы слишком длинный

Мы используем этот XSL-FO для создания записей на странице оглавления:

<fo:block text-align-last="justify">
    <xsl:value-of select="@title" />
    <fo:leader leader-pattern="dots" />
    <fo:page-number-citation ref-id="{@id}" />
</fo:block>

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

Насколько я могу судить, XML правильный, и это проблема самого XSL-FO. Есть ли способ правильно выровнять все номера страниц, не изменяя ничего в макете?

изображение оглавления, где заголовки страниц имеют разную длину, а средняя длина имеет номер страницы, выровненный по левому краю

Обновление:

Спасибо за ответ, Тони Грэм, к сожалению, мне он почему-то не кажется. На линиях, которые должны иметь одну непрерывную выноску, я получил бы два набора точек выноски, разделенных небольшим промежутком, от которого я не мог избавиться. Но это вдохновило меня на это решение, которое работает достаточно хорошо для меня:

<fo:block text-align-last="justify">
    <xsl:value-of select="@title" />
    <fo:leader leader-pattern="dots" />
    <fo:page-number-citation keep-with-previous="always" ref-id="{@id}" />
</fo:block>

person uniquelydave    schedule 14.06.2020    source источник
comment
Какое программное обеспечение вы используете для создания PDF? Если вы используете Antenna House Formatter, у него есть расширения для обработки этого случая: docs.antennahouse.com/formatter/   -  person potame    schedule 15.06.2020
comment
Невозможно решить эту проблему, если форматтер, который вы используете, не поддерживает принудительное расширение fo:leader безоговорочно, как на приведенной выше странице примера.   -  person tmakita    schedule 15.06.2020


Ответы (1)


По сути, у вас есть примеры 1, 3 и 5 из документации axf:leader-expansion по адресу https://www.antenna.co.jp/AHF/help/v70e/ahf-ext.html#axf.leader-expansion

Как указывали другие, вы не можете обрабатывать все возможные варианты ToC или индекса с помощью vanilla XSL-FO, но вы можете добиться результата для примера, который вы показали:

<fo:flow flow-name="xsl-region-body"
     leader-alignment="reference-area"
     text-align-last="justify">
  <fo:block>Page with very short title<fo:leader leader-pattern="dots" keep-with-previous.within-line="always" /><fo:leader leader-pattern="dots" />3</fo:block>
  <fo:block>Page with very very very very very very very very long title<fo:leader leader-pattern="dots" keep-with-previous.within-line="always" /><fo:leader leader-pattern="dots" />4</fo:block>
  <fo:block>Page with very very very very very very very very very very very very long title<fo:leader leader-pattern="dots" keep-with-previous.within-line="always" /><fo:leader leader-pattern="dots" />5</fo:block>
</fo:flow>

Отформатированное оглавление

Протестировано с помощью AH Formatter V7.0.

person Tony Graham    schedule 15.06.2020