我在尋找如何使用InDesign Tagged Text創建交叉引用的解決方案,但我無法找到任何好的建議。Indesign標籤文本交叉引用,像使用ICML標籤進行交叉引用一樣工作
這是我的場景,我的任務是創建一個用於將XML轉換爲InDesign和InDesign的XML的圓形跳閘工作流程,反之亦然。我還需要交叉引用URL和End Notes鏈接。首先,我必須創建和將XML轉換爲InDesign標記文本的XSLT腳本(因爲大多數操作員仍使用InDesign CS3,所以我使用了標記文本)。然後在完成頁面組合後,我們必須將InDesign文件導出到XHTML(導出爲Dreamweaver)。創建另一個XSLT腳本將XHTML轉換爲XML以用於ePub轉換(爲什麼不直接將InDesign導出到ePub?答案是需要大量定製)。
下面是我的XSLT代碼爲標記文本創建交叉引用:
將交叉裁判的InDesign:
<xsl:template match="/">
<--! End Notes -->
<xsl:text><XRefFmtDefn:=<FmtNm:ntf><CharStyleRef:ntf><BldBlkLen:1><BldBlk:=<BlkTyp:ParagraphNumber><CstmTxt:><CharStyleRef:><InclDlm:0>>></xsl:text>
<xsl:for-each select="descendant::apnf">
<xsl:variable name="num" select="count(preceding::apnf) + 1"/>
<xsl:text><HplDestDfn:=<HplDestName:Anchor </xsl:text><xsl:value-of select="$num"/><xsl:text>><DestKey:</xsl:text><xsl:value-of select="$num"/><xsl:text>><HplDestIdx:1</xsl:text><xsl:text>><IsPara:1><Hid:0>></xsl:text>
</xsl:for-each>
<--! URL -->
<xsl:text disable-output-escaping="yes"><HplDestDfn:=</xsl:text>
<xsl:for-each select="descendant::libelle[generate-id()=generate-id(key('urlDistinct', @cible)[1])]">
<xsl:value-of select="concat('<HplDestName:', replace(@cible,'/', '\\/'),'><DestKey:1><HplDestUrl:http\:\/\/', replace(@cible,'/', '\\/'), '>')"/>
</xsl:for-each>
<xsl:text disable-output-escaping="yes"><Hid:0>></xsl:text>
<xsl:apply-templates/>
</xsl:template>
創建完備註交叉引用鏈接:
<xsl:template match="apnf">
<xsl:variable name="num" select="count(preceding::apnf) + 1"/>
<xsl:text><cstyle:ntf></xsl:text>
<xsl:text><Hpl:=<HplName:</xsl:text><xsl:value-of select="@id"/> <xsl:text>><HplDest:Anchor </xsl:text><xsl:value-of select="$num"/><xsl:text>><DestKey:</xsl:text><xsl:value-of select="$num"/><xsl:text>><XRefFmt:ntf><CharStyleRef:><HplLen:1><HplOff:0><Hid:0><Brdrv:0><Brdrw:Thin><Brdrh:None><Brdrs:Solid><Brdrc:0\,0\,0>></xsl:text>
<xsl:value-of select="$num"/>
<xsl:text><cstyle:></xsl:text>
</xsl:template>
創建交叉引用URL
<xsl:template match="url">
<xsl:text><cstyle:url></xsl:text>
<xsl:choose>
<xsl:when test="exists(libelle)">
<xsl:text><Hpl:=<HplName:</xsl:text><xsl:value-of select="replace(libelle/@cible,'/', '\\/')"/><xsl:text>><HplDest:http\:\/\/</xsl:text><xsl:value-of select="replace(libelle/@cible,'/', '\\/')"/><xsl:text>><DestKey:1><CharStyleRef:><HplLen:3><HplOff:0><Hid:0><Brdrv:0><Brdrw:Thin><Brdrh:None><Brdrs:Solid><Brdrc:0\,0\,0>></xsl:text>
<xsl:sequence select="libelle/text()"/>
</xsl:when>
<xsl:otherwise>
<xsl:sequence select="./text()"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text><cstyle:></xsl:text>
</xsl:template>
這是我的問題,當我將標記文本導入到InDesign URL並且endnotes有死鏈接時。我懷疑它是目標鍵,因爲當我嘗試導出帶有工作鏈接的示例InDesign時,目標鍵針對的是應該交叉引用的字符的位置。
我的問題是:
- 交叉引用在InDesign標記文本支持像ICML呢?
- 是否有一種方法可以使用XSLT獲取XML中字符的位置()(意味着整個XML中的字符位置不在單個節點內)?如果可能的話,也許我可以正確地得到目標密鑰。
任何意見或建議,高度讚賞。
謝謝!
P.S.此鏈接http://forums.adobe.com/message/3978432#3978432也討論了交叉參考條目的InDesign標記文本,但沒有給出完整的解決方案。
謝謝喬希的意見和建議。我的下一個問題是,您是否對如何開始製作InDesign JavaScript有所瞭解。我對JavaScript沒有什麼瞭解,但不像javascripters那麼好。還有一個由JongWare腳註創建的用於結束註釋的腳本,但這與問題不同,因爲我只需要修復交叉引用的鏈接。希望你可以給我樣本腳本,我應該開始。再次感謝! – rhemb
學習JavaScript API有一些很好的資源。來自Adobe的[這](http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/indesign/pdfs/InDesignCS5_ScriptingGuide_JS.pdf)是javascripting指南。此外,jongware提供了一套很棒的腳本DOM的html文檔[這裏](http://jongware.mit.edu/idcs5/inxx.html) –