用于MMT表面语法的Pygments插件(lexer&style)

mmtpygments的Python项目详细描述


PyPIBuild StatusCodacy BadgeGitHub LicensePRs Welcome | GitHub Repo| Collection of rendered codes

mmtpygents:MMT表面语法的Pygments插件

为了支持来自MMT projectMMT Surface Syntax的语法高亮显示,这个包是一个Pygments插件,包括

  • Pygments lexer(mmt
  • 推荐的Pygments样式(mmtdefault
  • 并实验性地为MMT关系数据(mmtrel)设计了一个Pygments lexer。在

呈现代码的集合:click here屏幕截图:(点击查看实时版本) Screenshot of highlighted MMT code

安装

  • 通过Pip(简单)

    pip install Pygments mmtpygments
    
  • 通过pipenv或其他优于Pip的Python包管理器:

    1. 在您的项目目录中运行pipenv install pygments mmtpygments,例如,包含您要在其中使用它的LaTeX文件

    2. 记住从现在起始终在那个虚拟环境上下文中使用mmtpygments:在pipenv shell中运行您想要的命令

      例如,如果您想在LaTeX中使用它并将TeXStudio用作IDE,请从该shell中启动TeXStudio。在

    这样,你就不会把你的整个电脑和Pip包更重要的是,你在步骤(2.1)中生成的Pipfile.lock文件中记录了Pip包的版本。在

使用

CLI

^{pr2}$

这告诉Pygments使用HTML格式化程序(-f)、MMT lexer(-l),并使用mmtdefault呈现的mmtdefault样式(-O)输出一个完整的HTML文件到test.html-o)。在

乳胶(含薄荷)

minted是一个以Pygments为后端呈现代码的乳胶包。在

% !TeX encoding = UTF-8% !TEX TS-program = latexmk -xelatex -shell-escape -silent -latexoption="-synctex=1 -8bit" %%% ^^^ This is the build command. Install latexmk if you don't have it already.%     You may choose an alternative LaTeX derivative, e.g. LuaLaTeX, but be warned that it must support Unicode!\documentclass{article}\usepackage{fontspec}% Download GNU Unifont from http://unifoundry.com/unifont/index.html% And save it, say, as "fonts/unifont-12.1.03.ttf"\newfontfamily\unifont{unifont-12.1.03.ttf}[Path=./fonts/,NFSSFamily=unifont]

% Disable caching for debugging purposes (increases compilation times!)\usepackage[cache=false]{minted}\setminted{fontfamily=unifont,tabsize=2,breaklines=true}\newminted[mmtcode]{mmt}{}\newmintinline[mmtinline]{mmt}{}\newmintedfile[mmtfile]{mmt}{}\begin{document}% Variant 1: Code given in LaTeX, rendered in display mode\begin{mmtcode}
theory MyTheory = c : type ❘ # abc ❙❚
	\end{mmtcode}% Variant 2: Code given in LaTeX, rendered inline% You can use any delimiter you like, here we use /\mmtinline/theory MyTheory = c : type ❘ # abc ❙❚/

	% Variant 3: Code given externally in file, rendered in display mode% \mmtfile{your-mmt-file.mmt}\end{document}

LaTeX Beamer:对帧嵌入代码使用fragile选项:\begin{frame}[fragile] ... \end{frame}

有关如何自定义它的详细信息,请参阅minted manual。在

常见错误:呈现的PDF显示源的制表符

如果您在MMT源代码中突出显示字符,并且它们显示在XeLaTeX呈现的PDF中,那么您将面临一个已知的XeLaTeX错误([1][2])。它可以通过将-8bit传递给XeLaTeX来解决。在

image

发展

  1. 安装pipenv,它提供了一个一致的Python、pip和包环境,锁定在提交的PipfilePipfile.lock文件中。在
  2. pipenv install
  3. git submodule init
  4. git submodule update

测试

  1. cd mmtpygments/test
  2. pipenv run python test.py ./(失败时返回非零退出代码)
  3. 在浏览器中打开index.html,可以直观地看到故障(红色矩形)。在

这个^{}在包含大量MMT表面语法的大型MMT存档上运行lexer。它递归地搜索mmtpygments/test/data中的MMT文件,然后在该文件上运行所提供的lexer和Pygment的HtmlFormatter。呈现的版本写在原始的*.mmt文件旁边,扩展名为.html。此外,生成index.html和{}来链接和显示结果。在

Travis构建自动运行^{},并将结果部署到gh-pages分支上,请参见https://comfreek.github.io/mmtpygments/,尤其是{a19}。在

开发工作流

对于修补和测试lexer,建议使用与上述相同的测试基础设施。即使Travis构建在lexing错误时失败,^{}实际上没有——它只是返回一个非零的退出代码。事实上,它甚至生成了用红色矩形围绕词法分析错误的HTML呈现。因此,在修补lexer时,只需定期运行^{},并在浏览器中本地查看{}以查看任何错误。在

出版

发布是在主分支上的标记提交后通过.travis.yml自动完成的。为了那件事

  1. 本地提交所有更改。在
  2. 创建一个新的版本标记:git tag -a vx.y.z -m "Version x.y.z, see CHANGELOG.md"(标记名需要以v开头,并为Travis CI指定一个数字,请参见^{}
  3. 按下commit和标记:git push && git push --tags
  4. 不推荐:如果由于任何原因确实必须手动发布版本,请执行以下操作:

    # Packaging
    $ pipenv run python setup.py sdist bdist_wheel
    
    # Checking if packages are okay (PyPi server will do the same)
    $ pipenv run twine check dist/*
    
    # Upload to Test PyPi repository
    $ pipenv run twine upload --repository-url https://test.pypi.org/legacy/ dist/*
    
    # Upload to real PyPi repository
    $ pipenv run twine upload dist/*
    

    对于未来的维护人员:在存储库移动的情况下进行必要的更改

    如果您希望将此存储库或其分支托管到其他位置,则必须在以下位置进行更改:

    • README.md:将引用https://ComFreek.github.io/mmtpygments下的任何内容的所有链接更改为在其中部署东西的URI。在
    • .travis.yml
      • 将运行python test.py的基路径更改为宿主URI。在
      • 将under deploy/pypi中的secret值更改为可以发布pypi包的另一个pypi令牌。在

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java找不到适合makeText的方法   如何将java数组转换为prolog列表并使用它进行jpl查询?   安卓中显示ArrayList的java子类ArrayAdapter   Java8GroupingBy到包含列表的映射中   java Json字符串,带有要映射的嵌套对象<string,string>   java Hibernate中的包和列表有什么区别?   java Spring REST模板指定Jackson视图   java如何在继承的类中返回字符串?   调试Java ArrayQue删除和轮询方法错误   带有NetBeans 7.4的java JSP自定义标记Struts2   java无法从加载jar文件。蝙蝠锉   无法解析java image_项“未显示在下拉列表中且无法键入”   jdoDetachedState设置为null的java查询实体   scala使用Cypher CREATE命令和属性映射,来自Java   minecraft中的java/me并没有被我编写的插件禁用   java Cucumber框架设置   java以奇怪的方式遍历LinkedList?   java JPA将布尔字段配置为保留为整数   月球着陆器中的java Android垃圾收集