docbook 문서를 LaTeX로 처리하는 일부 dblatex XSLT 코드를 수정하려고합니다. 우리는 우리 지방의 필요를 위해 꽤 많은 개조를했다. 그러나 이것은 나를 비틀 거리게했다.속성을 기반으로 한 랩
사실상 모든 docbook XML 요소에 나타날 수있는 '잠재 고객'속성이 있습니다. 문서에서 대부분의 요소는이 attr에 대해 표시가 해제되어 있지만 일부는 'tech'또는 'nontech'로 표시되어 있습니다.
<chapter audience='tech'>
(lot of stuff)
</chapter>
오히려 "프로파일"기구를 사용하는 대신, I는
\technical{ \chapter (lots of stuff) }
즉 라텍스 태그와 같은 특성을 갖는 소자를 처리 결과 텍 코드 랩 싶은 내 이 포장 작업을 수행하기위한 XSLT 코드의 시도는 다음과 같습니다
<xsl:template match=".[@audience='tech']">
<xsl:text>\technical{</xsl:text>
<xsl:apply-templates/>
<xsl:text>}</xsl:text>
</xsl:template>
불행하게도,이 결과는이 템플릿과 일치하는 XML 요소가 처리되지 않는다는 것입니다, (xslt 코드에 @select 속성이 없을 때 예상되는 것처럼) 딸만이 수행합니다. 그렇다면 원래는 LaTeX의 출력이 섹션에 대한 LaTeX의 코드가 아닌 장에 대한
<chapter role='tech'>
<section>blah blah</section>
</chapter>
했다. 나는 위의 XSLT 코드를 변경하는 경우
반하여, 그것은 명시 적
<xsl:apply-templates select="."/>
그때 내가 무한 재귀를 얻을 수있다 그래서.
개념적으로, LaTeX wrapper \ technical {...}를 출력하여 @audience attr이있는 XML 요소를 처리하도록 xslt에 지시 한 다음 @ audience = '기술'속성.
이 방법이 있습니까? xslt v2를 사용해야하는 경우 xslt v1을 사용하고 있습니다. 어떻게 변경했는지는 확실하지 않지만 방법이 있어야합니다 ...)
스키마에서 @audience attr을 허용하는 모든 요소에 모드를 지정해야합니까? 나는 분명히하고 싶지 않을 것이다. (docbook에는 100 가지 요소가 있고, dblatex 코드는 이미 충분히 복잡하다.) 내가 그것을 시도해야하고 위의 "secondRun"을 생략 할 수 있는지 확인해야합니다. –
'secondRun' 모드를 생략 할 수 있습니다. 메커니즘을 설명하기 위해 포함 시켰습니다. 일반적으로,'xsl : apply-templates' 엘리먼트가 모드를 지정하면, 그 모드의 템플리트 만 적용됩니다. 그렇지 않으면 모든 모드 (예 : 기본 동작)에 속하지 않는 템플릿이 적용됩니다. 반대로, 모드를 지정하는 템플릿은 같은 모드의'xsl : apply-templates'에 의해서만 매치 될 수 있습니다. – Meyer
@Mike Maxwell,이 답변으로 충분 했습니까? 아니면 도움이 더 필요합니까? – Meyer