2012-11-29 89 views
0

我在尋找如何使用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>&#60;XRefFmtDefn:=&#60;FmtNm:ntf>&#60;CharStyleRef:ntf>&#60;BldBlkLen:1>&#60;BldBlk:=&#60;BlkTyp:ParagraphNumber>&#60;CstmTxt:>&#60;CharStyleRef:>&#60;InclDlm:0>>></xsl:text> 
    <xsl:for-each select="descendant::apnf"> 
     <xsl:variable name="num" select="count(preceding::apnf) + 1"/> 
     <xsl:text>&#60;HplDestDfn:=&#60;HplDestName:Anchor </xsl:text><xsl:value-of select="$num"/><xsl:text>>&#60;DestKey:</xsl:text><xsl:value-of select="$num"/><xsl:text>>&#60;HplDestIdx:1</xsl:text><xsl:text>>&#60;IsPara:1>&#60;Hid:0>></xsl:text> 
    </xsl:for-each> 

    <--! URL --> 

    <xsl:text disable-output-escaping="yes">&#60;HplDestDfn:=</xsl:text> 
    <xsl:for-each select="descendant::libelle[generate-id()=generate-id(key('urlDistinct', @cible)[1])]"> 
     <xsl:value-of select="concat('&#60;HplDestName:', replace(@cible,'/', '\\/'),'&#62;&#60;DestKey:1&#62;&#60;HplDestUrl:http\:\/\/', replace(@cible,'/', '\\/'), '&#62;')"/> 
    </xsl:for-each> 
    <xsl:text disable-output-escaping="yes">&#60;Hid:0&#62;&#62;</xsl:text> 
    <xsl:apply-templates/> 
</xsl:template> 

創建完備註交叉引用鏈接:

<xsl:template match="apnf"> 
    <xsl:variable name="num" select="count(preceding::apnf) + 1"/> 
    <xsl:text>&#60;cstyle:ntf&#62;</xsl:text> 
    <xsl:text>&lt;Hpl:=&lt;HplName:</xsl:text><xsl:value-of select="@id"/> <xsl:text>>&lt;HplDest:Anchor </xsl:text><xsl:value-of select="$num"/><xsl:text>>&lt;DestKey:</xsl:text><xsl:value-of select="$num"/><xsl:text>>&lt;XRefFmt:ntf>&lt;CharStyleRef:>&lt;HplLen:1>&lt;HplOff:0>&lt;Hid:0>&lt;Brdrv:0>&lt;Brdrw:Thin>&lt;Brdrh:None>&lt;Brdrs:Solid>&lt;Brdrc:0\,0\,0>></xsl:text> 
    <xsl:value-of select="$num"/> 
    <xsl:text>&#60;cstyle:&#62;</xsl:text> 
</xsl:template> 

創建交叉引用URL

<xsl:template match="url"> 
    <xsl:text>&#60;cstyle:url&#62;</xsl:text> 
    <xsl:choose> 
     <xsl:when test="exists(libelle)"> 
      <xsl:text>&lt;Hpl:=&lt;HplName:</xsl:text><xsl:value-of select="replace(libelle/@cible,'/', '\\/')"/><xsl:text>&gt;&lt;HplDest:http\:\/\/</xsl:text><xsl:value-of select="replace(libelle/@cible,'/', '\\/')"/><xsl:text>>&lt;DestKey:1>&lt;CharStyleRef:>&lt;HplLen:3>&lt;HplOff:0>&lt;Hid:0>&lt;Brdrv:0>&lt;Brdrw:Thin>&lt;Brdrh:None>&lt;Brdrs:Solid>&lt;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>&#60;cstyle:&#62;</xsl:text> 
</xsl:template> 

這是我的問題,當我將標記文本導入到InDesign URL並且endnotes有死鏈接時。我懷疑它是目標鍵,因爲當我嘗試導出帶有工作鏈接的示例InDesign時,目標鍵針對的是應該交叉引用的字符的位置。

我的問題是:

  1. 交叉引用在InDesign標記文本支持像ICML呢?
  2. 是否有一種方法可以使用XSLT獲取XML中字符的位置()(意味着整個XML中的字符位置不在單個節點內)?如果可能的話,也許我可以正確地得到目標密鑰。

任何意見或建議,高度讚賞。

謝謝!

P.S.此鏈接http://forums.adobe.com/message/3978432#3978432也討論了交叉參考條目的InDesign標記文本,但沒有給出完整的解決方案。

回答

1

剛剛爲自己測試過。可以在導入標籤文本之前添加交叉引用,但正如您所指出的那樣,您必須找到與整個文檔相比較的交叉引用目標的字符位置。這聽起來很難且容易出錯,特別是當你考慮到特殊字符的可能性時。雖然,這是可能的。

此外,我不認爲這是<HyperlinkDestKey:5>標籤是針對字符的位置,我認爲它是<HyperlinkDestIndex:55555>標籤。

它可能並不理想,但您可以在導入標記的文本後應用Javascript,而不是在InDesign標記的文本中手動添加交叉引用。 JavaScript API將會更容易處理交叉引用,但它也會變慢。

下面是一個使用超鏈接使用JavaScript API的例子:

// Get the currently active document 
var doc = app.activeDocument; 

// Get the hyperlink source and destinations by feeding them 
// an InDesign text object. 
var linkSource = doc.hyperlinkTextSources.add(sourceText); 
var linkDest = doc.textDestinations.add(destText); 

// Add the hyperlink to the document 
doc.hyperlinks.add(linkSource, linkDest); 

你可以通過你的文檔中找到他們得到sourceTextdestText。找到想要製作超鏈接的文本對象的一種方法是使用可從DOM訪問的InDesign的查找更改功能來查找它們。

+0

謝謝喬希的意見和建議。我的下一個問題是,您是否對如何開始製作InDesign JavaScript有所瞭解。我對JavaScript沒有什麼瞭解,但不像javascripters那麼好。還有一個由JongWare腳註創建的用於結束註釋的腳本,但這與問題不同,因爲我只需要修復交叉引用的鏈接。希望你可以給我樣本腳本,我應該開始。再次感謝! – rhemb

+0

學習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) –