1

1

我正在编写一个三语词汇表。这个想法是将三列(德语、英语、意大利语)并排放在两页上。数据存储在一个 XML 文件中,其结构如下

<root>
<row>
    <mainD>Altern (n)</mainD>
    <mainE>ageing (En)</mainE>
    <mainI>Invecchiamento</mainI>
    <desD>Änderung der Eigenschaften eines Werkstoffs bei oder in der Nähe der Raumtemperatur in Abhängigkeit von der Zeit (Natürliche Alterung bei Raumtemperatur; künstliche bei erhöhter Temperatur)</desD>
    <desE>A change in properties with time that may occur gradually at room temperature (natural ageing) and more rapidly at higher temperatures (artificial ageing)</desE>
    <desI>Modifica nel tempo delle proprietà; può avvenire a temperatura ambiente (invecchiamento naturale) oppure a temperatura elevata (invecchiamento artificiale)</desI>
    <norm>VDI 3137</norm> 
</row>
...
</root>   

在阅读了大量有关 SX 的帖子后,我最终开始研究 ConTeXt。

目前我正在研究三种采用不同方法的替代解决方案。

1

第一个只是按照描述处理段落这里。这里我展示的是一个只有两种语言(德语和意大利语)的示例。该方法利用了段落之间的同步性,\obeylines以提供所需的结构。尽管如此,我无法将这种方法扩展到跨越三种不同语言的三列,因此无法并排使用两页。

\startxmlsetups xml:root
  \defineparagraphs[GermanItalian][n=2,before={\blank},after {\blank},tolerance=verystrict,align=flushleft]
  \setupparagraphs [GermanItalian][1][width=.5\textwidth]
  \setupparagraphs [GermanItalian][2][width=.5\textwidth]
  \starttext
  \startGermanItalian
    \bf{German}
  \GermanItalian
    \bf{Italian}
  \stopGermanItalian
  \xmlflush{#1}
  \endtext
\stopxmlsetups

\startxmlsetups xml:row
  \startGermanItalian
    \obeylines
    {\bf \xmltext{#1}{./mainD}}  \break \xmltext{#1}{./desD}
  \nextGermanItalian
    \obeylines
    {\bf \xmltext{#1}{./mainI} }    \break \xmltext{#1}{./desI}
  \stopGermanItalian
  \xmlflush{#1} 
\stopxmlsetups

\starttext
  \xmlprocessfile{dict}{test01sx.xml}{}
\stoptext

2

第二种方法是使用简单的表格而不是段落。这里我展示了三种语言的结构,但我无法让它们并排跨越两页。

\startxmlsetups xml:root
  \bTABLE[split=repeat,option=stretch]% head on every page, stretch columns
  \bTABLEhead
    \bTR
      \bTH German \eTH
      \bTH  English \eTH
      \bTH  Italian \eTH
    \eTR
    \eTABLEhead
    \bTABLEnext
    \bTR
      \bTH German \eTH
      \bTH  English \eTH
      \bTH  Italian \eTH
    \eTR
    \eTABLEnext
  \bTABLEbody
  \xmlflush{#1}
  \eTABLEbody
  \eTABLE
\stopxmlsetups

\startxmlsetups xml:row
  \bTR
  \bTC  {\bf \xmltext{#1}{./mainD}}  \\ \indentation \xmltext{#1}{./desD} 
  \eTC
  \bTC  {\bf \xmltext{#1}{./mainE} } \\ \indentation \xmltext{#1}{./desE} 
  \eTC
  \bTC  {\bf \xmltext{#1}{./mainI} } \\ \indentation \xmltext{#1}{./desI} 
  \eTC
  \eTR
\stopxmlsetups

\starttext
  \xmlprocessfile{dict}{test01sx.xml}{}
\stoptext

3

最后一种方法是尝试使用\linetable如上下文文档所示。我\linetable用数字测试了这种方法,似乎有效,尽管我需要学习如何触发特定需求。然而,当将文本放入单元格内时,它似乎失败了。没有遵守所需的间距,也没有遵守相邻页面之间的同步。这是示例。

\startxmlsetups xml:root
  \defineparagraphs [mypar][n=1,tolerance=verystrict,align=flushleft] 
  \setupparagraphs [mypar][1] [width=0.4\textwidth]
  \setuplinetable[n=3][split=yes]
  \setuplinetable[c][3] [width=\textwidth]
  \startlinetable
  \BH
  \BC German \EC
  \BC English \EC
  \BC Italian  \EC 
  \EH
  \xmlflush{#1}
  \stoplinetable
\stopxmlsetups

\startxmlsetups xml:row
  \NC \startmypar
  {\bf \xmltext{#1}{./mainD}} \break \xmltext{#1}{./desD} 
  \stopmypar 
  \NC \startmypar
  {\bf \xmltext{#1}{./mainE}} \break \xmltext{#1}{./desE} 
  \stopmypar 
  \NC \startmypar
  {\bf \xmltext{#1}{./mainI} }   \break \xmltext{#1}{./desI} 
  \stopmypar
  \NC
  \NR
  \xmlflush{#1} 
\stopxmlsetups

\starttext
  \xmlprocessfile{dict}{test01sx.xml}{}
\stoptext

<code>\linetable</code> 的示例

有人能提供建议吗?

提前谢谢你。Michele

相关内容