列出 ConTeXt 文件中的源代码(带有标签和标题)

列出 ConTeXt 文件中的源代码(带有标签和标题)

我希望在 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],其中optionTEXLUAXML。因此,要获取语法高亮显示的 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 打开时应给出的文件名称。请注意,您应该使用 Adob​​e 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

如果愿意的话,您可以将其包装在宏后面。

这是 Adob​​e Acrobat 中的输出截图。我打开了 Acrobat 中的附件选项卡,显示附件已包含在内。还请注意列表标题附近​​的附件符号。

在此处输入图片描述

相关内容