我希望在 ConTeXt MKIV 中包含带有源代码的列表,并拥有一个标记和引用列表的机制,甚至能够附加代码useattachment
。
在 LaTeX 中,我将借助以下软件包来编写此代码listings
:
\begin{figure}
\centering
\lstinputlisting[style=code,caption={XML document},label=lst:xml_book]{xml/book.xml}
\end{figure}
LaTeX 在执行时选择正确的位置figure
。我不知道 ConTeXt 如何处理这个问题。我们可以看到标签、标题和包含文件的路径。我很难告诉 ConTeXt 源文件在哪里。
此外,我还看到了例子允许作者在 PDF 文件中附加源代码附件。即使我可以使用源代码的 URL,这样做也很有趣。
\define[1]\Ex{\externalfigure[code/#1]
\useattachment[#1][code/#1.scd]
\attachment[#1]
}
但我无法让它工作,因为找不到我的源代码文件。我尝试了所有我能想到的目录/文件组合,但都没有成功。
我所做的就是将源代码放入 ConTeXt 文件中(当然我希望包含来自外部文件的代码)。
\definetyping[XML]
\setuptyping
[XML]
[numbering=line,
option=none,
bodyfont=small,
location=intext,
before={\startframedcode},
after={\stopframedcode}]
\startXML
<?xml version="1.0" encoding="UTF-8"?>
<book added_at="2011/07/15 15:02">
...
</book>
\stopXML
我查阅了文档和各种资料,但都没有帮助。有人可以发布一个完整的工作示例吗?
答案1
让我们按步骤进行:
1. 显示文件列表
该命令
\typefile
逐字显示文件。因此\typefile[xml/book.xml]
将显示 XML 代码,但不显示语法高亮。
要启用语法高亮显示,请
\typefile
使用\typefile[option]
,其中option
是TEX
、LUA
或XML
。因此,要获取语法高亮显示的 XML 代码,请使用:\typefile[XML][xml/book.xml]
可以为其他语言编写解析器,但更简单的选择是使用
t-vim
模块。
2. 代码列表的浮动环境
如果你想复制你提供的 LaTeX 示例,你可以使用
\startplacefigure [ location={here,top}, title={XML Document}, reference={lst:xml_book}, ] \typefile[XML]{code/book.xml} \stopplacefigure
如果您不想为代码列表使用单独的浮点类别,则可以使用以下命令定义一个新的浮点类别:
\definefloat[listing][listings]
第二个参数在宏中用于显示列表列表(
\placelistoflistings
和\completelistoflistings
,类似于\placelistoffigures
和\completelistoffigures
)。\starttext \startplacelisting [ location={here,top}, title={XML Document}, reference={lst:xml_book}, ] \typefile[XML]{code/book.xml} \stopplacelisting \stoptext
3. 添加附件
为了确保附件正常工作,您需要使用以下方式启用交互:
\setupinteraction[state=start]
虽然使用附件的旧方法仍然有效,但新(MkIV)语法更简洁:
\attachment[file=code/book.xml, title={View Source Code}, name=book.xml, author=Ludovic Kuty]
file
是要包含的文件的名称(相对于context
正在运行的目录);name
是从 Acrobat 打开时应给出的文件名称。请注意,您应该使用 Adobe Acrobat(Reader 或 Pro)测试 PDF。其他 PDF 阅读器可能不支持所有 PDF 功能。
完整的工作示例
\definefloat[listing][listings]
\setupinteraction[state=start]
\starttext
\startplacelisting
[
location={here,top},
title={XML Document\attachment[file=code/book.xml, title={View Source Code}, name=book.xml, author=Ludovic Kuty]},
reference={lst:xml_book},
]
\typefile[XML]{code/book.xml}
\stopplacelisting
\stoptext
如果愿意的话,您可以将其包装在宏后面。
这是 Adobe Acrobat 中的输出截图。我打开了 Acrobat 中的附件选项卡,显示附件已包含在内。还请注意列表标题附近的附件符号。