Hi Georg Here is the fo fragment produced by the stylesheet in my first post. ---- <fo:list-block space-before.minimum="0.8em" space-before.optimum="1em" space-before.maximum="1.2em" space-after.minimum="0.8em" space-after.optimum="1em" space-after.maximum="1.2em" provisional-label-separation="0.85mm" provisional-distance-between-starts="8.47mm"> <fo:list-item space-before.minimum="0.8em" space-before.optimum="1em" space-before.maximum="1.2em" relative-align="baseline"> <fo:list-item-label end-indent="label-end()"> <fo:block text-align="start">1.</fo:block> </fo:list-item-label> <fo:list-item-body start-indent="body-start()"> <fo:block space-before="0em" space-after="0em"> <fo:block space-before="0px" space-after="0px" line-height="1px" font-size="1"> <fo:inline id="one"> </fo:inline> <fox:destination internal-destination="one"/> <fo:inline id="first"> </fo:inline> <fox:destination internal-destination="first"/> </fo:block> <fo:block space-before.minimum="0em" space-before.optimum="0em" space-before.maximum="0em" space-after.minimum="0.4em" space-after.optimum="0.5em" space-after.maximum="0.6em">First step.</fo:block> </fo:block> </fo:list-item-body> </fo:list-item> </fo:list-block> ----
Since that post I have modified the block which contains the fox:destination elements so that it has negative space-after, and that appears to allow the list item labels to line up with the list items proper. That may be a pragmatic solution but am I doing this the best way? Without the target elements in the XML, the block containing the text "First step." would have the standard space-before of 0.5+/-0.1em, and this space would be collapsed (or ignored) at the top of list items. The code has had to become a lot more complex to change those space-before's to 0, and I would be a lot more confident if I hadn't had to do that :-) Cheers T -----Original Message----- From: Georg Datterl [mailto:[email protected]] Sent: Monday, 7 June 2010 7:04 p.m. To: [email protected]; [email protected] Subject: AW: anchors/bookmarks problem Hi Trevor, Can you post the final fo code as well, please? Regards, Georg Datterl ------ Kontakt ------ Georg Datterl Geneon media solutions gmbh Gutenstetter Straße 8a 90449 Nürnberg HRB Nürnberg: 17193 Geschäftsführer: Yong-Harry Steiert Tel.: 0911/36 78 88 - 26 Fax: 0911/36 78 88 - 20 www.geneon.de Weitere Mitglieder der Willmy MediaGroup: IRS Integrated Realization Services GmbH: www.irs-nbg.de Willmy PrintMedia GmbH: www.willmy.de Willmy Consult & Content GmbH: www.willmycc.de -----Ursprüngliche Nachricht----- Von: Trevor Nicholls [mailto:[email protected]] Gesendet: Donnerstag, 3. Juni 2010 17:31 An: [email protected] Betreff: anchors/bookmarks problem Hi I am having a little trouble with FOP 0.95 and <fox:destination> elements in list items. XML fragment is something like the following, where a step is a numbered list item, and a target is a potential bookmark or hyperlink target: ---- <steps> <step> <target id="one">One</target> <target id="first">First</target> <para>First step.</para> </step> </steps> ---- XSL-FO for "steps" generates a standard list block, and for "list" a standard list-item. Targets generate an <fo:inline id="ID"> element which contains a zero width space (because an empty inline element causes FOP to crash with a NPE), and each group of targets is enclosed in an <fo:block> (because fo:inline cannot be a direct child of fo:flow, and some targets are. So here's the target bit of my XSL-FO: ---- <xsl:template match="target"> <xsl:choose> <xsl:when test="preceding-sibling::*[1][self::target]" /> <xsl:otherwise> <xsl:apply-templates select="." mode="first-anchor" /> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="target" mode="first-anchor"> <fo:block xsl:use-attribute-sets="def.space-none" line-height="1px" font-size="1"> <xsl:apply-templates select="." mode="anchor" /> </fo:block> </xsl:template> <xsl:template match="target" mode="anchor"> <xsl:variable name="tid" as="xs:string" select="@id" /> <fo:inline id="{$tid}">​</fo:inline> <fox:destination internal-destination="{$tid}" /> <xsl:apply-templates select="following-sibling::*[1][self::target]" mode="anchor" /> </xsl:template> ---- The def.space-none attribute set ensures that space-before and space-after is zero. I have a named template for normal blocks which detects when it is the first block after a group of targets and sets space-before to zero. So the only thing disturbing the alignment of the list-item-label and the first list-item-block content is the 1px line-height block containing the id'ed inline(s) and the fox:bookmark(s). Is there a way of eliminating the vertical space contributed by that block so that the list item aligns properly with its label? Or am I tackling this all wrong? Cheers Trevor --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
