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
乳胶生成的错误消息通常如下所示:
! …的参数。。。有一个额外的}。