背景

背景

背景

用户可以在文本区域中提供其地址信息,按 分隔行Enter。将生成一个 XML 文档,该文档将新行字符替换为\n,例如在以下文档中:

<html>
 <head>
  <title>The Mill on the Floss</title>
  <meta name="phone" content="" />
  <meta name="address" content="221B Baker St.\nLondon, U.K." />
 </head>
 <body>
  ...
 </body>
</html>

问题

我想根据元数据属性排版地址信息,并遵守换行符。(另外,可以\u000D直接向属性 [即 ] 发出换行符,但 ConTeXt 在读取 XML 文档时似乎会忽略换行符,因此会提供一个转义值。)

代码

我尝试了多种主题变化来逐字逐句地写出地址:

\startluacode
function xml.functions.address( t ) 
  lxml.attribute( t, "/html/head/meta[@name='address']", "content", "" )
end
\stopluacode

lxml.attribute用如下尝试替换该行,并结合许多不同的“LPATH”路径:

  • context( xml.attribute( t, "./", "content", "" ) )
  • context( t.at[0] )
  • context( t.at.content )
  • context( xml.filter( t, "/attribute(label)" ) )

数据存在是因为以下内容可以证明这一点:

  • for k,v in pairs(t) do context(v) end——写了很多元素。
  • context( t )-- 写入文档元数据,如下图所示(\缺少):

元内容

设置如下:

\startxmlsetups xml:address
  \gdef\TextAddress{\xmlfunction{#1}{address}}
\stopxmlsetups

用法:

\startsetups document:start
  \startstandardmakeup
    \startalignment[middle]
      \TextAddress
    \stopalignment
  \stopstandardmakeup
\stopsetups

问题

如何检索 XHTML 的地址元数据内容属性并将其分配给可以写入文档的宏,并尊重所有换行符?

...

或者,您如何构造文档元数据以包含多行地址信息,以便 LMTX 可以处理换行符的排版?

答案1

接下来是一个相当糟糕的解决方案。

在生成地址属性值的代码中,将所有换行符替换为命令\break{}\hfil可能不需要)。例如,在 Java 中:

string.replaceAll( "\n", "\\\\\\break{}" );

这将突破 XHTML 导出器代码中设置的任何实体障碍,但缺点是将文档与 TeX 耦合。(使用\\\newline会将代码与特定的 TeX 实现耦合。)输出文档包含:

<meta name="address" content="221B Baker St.\break{}London, U.K." />

创建一个 Lua 函数,将属性值写入文档。通过at使用 XHTML 元元素的属性键名(在本例中为content)取消引用表的值来实现此目的:

\startluacode
function xml.functions.address( t )
  context( t.at["content"] )
end
\stopluacode

从那里,像往常一样定义一个新的宏:

\startxmlsetups xml:address
  \gdef\TextAddress{\xmlfunction{#1}{address}}
\stopxmlsetups

避免将 TeX 代码与 XHTML 文档耦合的解决方案是将各行导出为枚举地址行。例如:

<meta name="address1" content="221B Baker St." />
<meta name="address2" content="London, U.K." />

这样的解决方案还有其他缺点。

相关内容