识字Agda

Agda支持开箱即用的有限形式的识字编程。如果您命名源文件有点拉格达,则所有代码都必须出现在代码阻碍:

\开始{code}模块无论在哪里...\结束{code}

忽略代码块外部的文本。如果您为代码环境,则有文字的Agda文件可以兼作乳胶文档源。示例定义:

\usepackage{逐字}\新环境{code}{\verbositim}{\endverpositim}

预处理器lhs2TeX型也可以处理有文字的Agda文件。

Unicode和LaTeX

LaTeX默认不理解UTF-8字符编码。您可以通过在源文件的前言中插入以下代码来告诉LaTeX将输入视为UTF-8:

\使用包{ucs}\使用包[utf8x]{inputenc}

这个ucs公司包不包含所有Unicode字符的定义。如果LaTeX投诉缺少某些字符的定义U+xxxx公司,然后您可以自己定义它:

\声明Unicode字符{“xxxx}{<定义>}

可能还需要指示LaTeX使用特定的字体编码。这个自动对焦程序包尝试自动选择字体编码:

\使用包{autofe}

(请注意,Agda的lhs2TeX支持文件已经完成了与上述步骤类似的操作。)

Unicode识字Agda的完整LaTeX模板

这已经在ubuntu和texlive下进行了测试,但在其他发行版中应该有效:

\文档类{article}%由于unicode,需要以下包%转换为(使用下一组包)%乳胶命令。如果您%使用更多unicode字符:\使用包{amssymb}\使用包{bbm}\usepackage[希腊语,英语]{babel}%这将处理unicode到latex的转换:\使用包{ucs}\使用包[utf8x]{inputenc}\使用包{autofe}%一些未自动定义的字符%(您可以通过获得的乳胶编译错误来判断),%您需要定义:\声明Unicode字符{8988}{\ensuremath{\ulcorner}}\声明Unicode字符{8989}{\ensuremath{\urcorner}}\声明Unicode字符{8803}{\ensuremath{\overline{\equiv}}}%根据需要添加更多(不应该经常发生)。%使用“\newenvironment”将逐字重新定义为%被称为“代码”并不总是正常工作。%您可以更可靠地使用:\使用包{fancyvrb}\定义语言环境{code}{Verbatim}{}%如果您愿意,请在此处添加花式选项。\开始{文档}\开始{code}…你的Agda密码在这里。。。\结束{code}\结束{文档}

LaTeX后端

Agda 2.3.2中添加了一个实验性LaTeX后端。它可以按如下方式使用:

agda—乳胶<文件>.lagda镉胶乳<latex-compiler><file>.tex

哪里<latex编译器>可以是pdflatex公司,X乳胶橡胶橡胶。请参阅版本版本2.3.2和2.3.4的注释,了解更多详细信息和示例:http://code.haskell.org/Agda/CHANGELOG

弥补lhs2TeX的%格式规则的不足

LaTeX后端没有类似于lhs2TeX的%格式规则的功能,但大多数系统都带有sed,可以用于实现类似的目标。例如,给定一个名为的文件,替换.sed包含:

    http://lpaste.net/raw/809365300608446464

我们可以按如下方式对tex输出进行后处理:

sed-f replace.sed<文件>.tex><文件>.sededmv<file>.sedded<file>.tex

请注意,上述sed文件假定使用{xe | lua}胶乳代码处于数学模式的位置而不是文本模式(使用pdflatex公司编译器)。注释掉了替换规则的变体是pdflatex公司等价物(请参阅下一节,然后再使用它们)。

处理super-和subscripts的替换规则允许我们编写阿帕^bepa在代码中对于我们希望在输出中上标的内容(\undertie对下标也这样做)。

手动排版内联代码

后端只在代码块中键入代码,内联代码必须手动排版,例如:

下面我们假设了一个名为\AgdaDatatype{apa}的集合。\开始{code}假设apa:设置\结束{code}

您可以找到后端使用的所有命令(您可以使用手动)。如果你做了很多手动操作排版,然后您可能需要引入较短的命令名,例如。:

\新命令{\D}{\AgdaDatatype}\新命令{\F}{\AgdaFunction}

etc.默认选择长名称以避免名称冲突。

半自动排版内联代码

自Agda版本以来2.4.2有半自动的实验支持文本内的排版代码,使用参考文献选项。这是一个完整的例子。

示例.lagda

\文档类{article}\usepackage[参考]{agda}\开始{文档}这里我们假设\AgdaRef{apa}。\开始{code}假设apa:设置\结束{code}\结束{文档}

生成文件

请注意后处理-latex.pl可以在Agda数据目录中找到,即问题cp$(目录名$(目录名称$(agda-mode-locate))/postprocess-latex.pl。(一次)之前制作.

AGDA=AGDAAFLAGS=-i.--乳胶SOURCE=示例POSTPROCESS=后处理-latex.plLATEX=latexmk-pdf-use-make-e“$$pdflatex=q/xelatex%O%S/”全部:$(AGDA)$(AFLAGS)$(来源).lagdacd胶乳/&&\perl/$(后处理)$(SOURCE).tex>$(SOURCE).processed&&\mv$(SOURCE).processed$(SOURCE).tex和&\$(乳胶)$(来源).tex&&\mv$(来源).pdf。。

实施细节

请参见https://code.google.com/p/agda/issues/detail?id=1054以了解实现细节。

{xe | lua}胶乳和适当的unicode字体

LaTeX在编写时从来没有考虑过unicode,像ucs公司包裹使它可以使用它们,但为了获得最佳输出,请考虑使用X乳胶卢阿拉特斯而不是。

中的默认数学字体阿格达·斯蒂虽然有限(缺少许多字符)。XITS字体更完整:

    http://www.ctan.org/tex-archive/fonts/xits/

只需将.otf文件保存到~/.字体,使用:

\setmainfont{XITS}\setmathfont{XITS数学}

在里面阿格达·斯蒂,并使用以下命令编译输出:

latexmk-pdf-e'$pdflatex=q/lualatex%O%S/'<文件>.tex

使用Beamer和LaTeX后端创建演讲幻灯片

有时您可能想包含一些代码,但不一定要完整记录有文字的Agda文件。以下部分描述了如何在波束形成器的上下文中进行此操作演示文稿,但对于文档来说应该类似。给定两个文件演示文稿.tex:

\文档类{beamer}%使用XeLaTeX时,应使用以下内容:%\documentclass[xetex,mathserif,serif]{beamer}%%XeLaTeX中的默认字体没有默认的项目符号字符,因此%更改字体:%\setmainfont{XITS}%\setmathfont{XITS数学}%%或更改字符:%\setbeamertemplate{itemize项}{}\使用软件包{latex/agda}\usepackage{catchfilebetweentags}\开始{文档}\开始{frame}\frametitle{Some Agda代码}\开始{itemize}\项目自然数\结束{itemize}\ExecuteMetaData[latex/Code.tex]{nat}\开始{itemize}\项目添加(\AgdaFunction{\_+\_})\结束{itemize}\执行元数据[latex/Code.tex]{plus}\结束{帧}\结束{文档}

代码.lagda:

%<*自然>\开始{code}dataℕ:设置位置零:ℕ例如:(n:ℕ)→\结束{code}%</nat>%<*plus>\开始{code}_+_ : ℕ → ℕ → ℕ零+n=nsuc m+n=suc(m+n)\结束{code}%</plus>

我们可以使用pdflatex公司编写演示文稿如下:

agda—乳胶代码.lagdalatexmk-pdf-use-make演示文稿.tex

如果您使用了大量unicode,使用起来可能会更方便X乳胶而不是。请参见关于的评论X乳胶在里面演示文稿.tex编译如下:

agda—乳胶代码.lagdalatexmk-e'$pdflatex=q/xelatexS/'-pdf-use-make演示文稿.tex

有了足够的新版本latexmk公司可以使用-X乳胶-标记而不是这个-e“…”东西。

\ExecuteMetaData命令是捕获两个标记之间的文件包裹,您可以在此处阅读更多信息:

  http://mirrors.ctan.org/macros/latex/contrib/catchfilebetweentags/catchfilebethweentags.pdf

有关包含Agda代码的其他方法,请参阅邮件列表上的以下线程在演示文稿中:

  http://comments.gmane.org/gmane.comp.lang.agda/6195

“我们可以在每次都不进行类型检查的情况下生成文档吗?”

不,排版对排版至关重要(否则我们不需要知道使用什么颜色等)。

然而,由于lhs2tex和乳胶后端是可互换的(或至少应该是),我想你可以有“快”和“慢”生成目标,例如一个具有以下内容的Makefile:

COMPILER=latexmk-pdf-use-make-e“$$pdflatex=q/xelatex%O%S/”快速:lhs2tex--agda<file>.lagda>latex/<file>.texcd胶乳&&\$(编译器)<file>.tex&&\mv<文件>.pdf。。慢:agda—乳胶<文件>.lagdacd胶乳&&\$(编译器)<file>.tex&&\mv<文件>.pdf。。

然后可以使用“make fast”进行编译,以避免类型检查(代价是没有颜色等)。

已知问题

unicode-math和polytable(旧版本)不兼容。请参阅此错误报告:

    https://github.com/kosmikus/lhs2tex/issues/29

乳胶生成的错误消息通常如下所示:

! …的参数。。。有一个额外的}。
页面上次修改时间:2015年2月3日下午03:03
技术支持私人维基