顶点:一个更容易的乳胶预过滤器

vertex2tex的Python项目详细描述


Vertex:一个前置过滤器,用于更容易的乳胶

你觉得tex语法有什么麻烦吗?例如,

<表><广告>如果不是这样…您希望键入此…< /广告><正文>一个0,一个1,多个,一个{n-1}a0、a1、ddd、an-1 \alpha、\beta、\gamma、…阿尔法、贝塔、伽马,…\mathbrak{p}\in\mathbb{z}BBZ中的FRP n^\mathrm{th}n eth\frac{2}{3}压裂2比3;\left x\rightabs x;f^{(n)}f supp n;f^{-1}f发票\sum{n=0}^\infty a u nn上的和从0到infty;an

…那么顶点可能是给你的!

ver tex发音为"ver tech",代表"verbal tex",即tex 在这种情况下,你输入的内容往往更接近你阅读时所说的内容 大声说出数学。

我在把德语数学翻译成英语时开发了Vertex, 我想尽快输入符号表达式 键入单词。

因此顶点的目标之一是帮助您保持 手指放在主排上。这会导致一些言语上的对等 吸引一些人,但不吸引其他人。嘿,随便你!

用法

您将使用两个主要功能: 翻译片段,以及翻译文档

translate_snippet直接应用于Vertex中编写的数学模式内容, 为了将它们转换为纯文本:

>>> from vertex2tex import *
>>> translate_snippet('bbQ(alp)')
'\\mathbb{Q}(\\alpha)'

在处理整个文档时,请使用translate\u documenttranslate_document的默认行为是 只有当数学模式的内容立即以@开头时,数学模式的内容才会。(然后从输出中省略@字符。) 这允许您选择顶点的使用位置和不使用位置。

例如,在下面的应用程序中,文本包含三次出现的数学模式,但仅在最后一次出现时 我们使用vertex(我们使用内置的关键字times),因此只有在那里我们才能用@开始数学模式。

>>> text = 'Find integers $a, b, c$ such that the sum $a+b+c$ and the product $@a times b times c$ are equal.'
>>> translate_document(text)
'Find integers $a, b, c$ such that the sum $a+b+c$ and the product $a\\times b\\times c$ are equal.'

此行为可以通过使用translate_document函数的关键字参数keychar>来控制。 设置keychar=none意味着顶点转换将应用于all数学模式。 然而,这需要在我们的文本中进行一些修改。 如果我们使用与上一个示例完全相同的文本来尝试此操作,则会出现两个问题:

>>> translate_document(text, keychar=None)
'Find integers $a, b, c$ such that the sum $a_{+ b+ c}$ and the product $@ a\\times b\\times c$ are equal.'

第一个问题是,现在vertex被应用于$a+b+c$,它使用自动订阅机制。 为了避免这种情况,我们必须在$a+b+c$中放置空格。 第二个问题是,现在第三种数学模式开始时的字符@不再被解释 作为一个keychar,所以简单地通过。为了适应这两个问题,我们将有

>>> text2 = 'Find integers $a, b, c$ such that the sum $a + b + c$ and the product $a times b times c$ are equal.'
>>> translate_document(text2, keychar=None)
'Find integers $a, b, c$ such that the sum $a+ b+ c$ and the product $a\\times b\\times c$ are equal.'

再次产生所需的结果。

作为第三种可能性,您甚至可以通过设置 关键字参数keychar等于该字符。但是,为了 互操作性。最好是标准化。

顶点语言

剪掉反斜杠!

当你在写数学的时候,你多久想要一个希腊字母alpha,以及 你经常想把变量a,l,p,h,和a相乘吗? 秩序?为什么要给你一个罗马字母序列,而 希腊字母需要反斜杠?

在vertex中,$alpha$生成希腊字母,如果您真的需要变量的乘积, 只需在字母之间加空格,如$a l p h a$

一般来说,顶点关键字不是前面有反斜杠的字符串, 只是一串串不受空格干扰的字母。 在概念上,vertex中的关键字可以分为以下四个 种类,根据它们在避免反斜杠方面所起的作用。

顶点关键字的类型:

  1. bsme
  2. 内置
  3. 括号单词
  4. 字体前缀

如果您想查看(或者在本地更改)关键字列表,只需 请参阅vertex包中的config.py模块。

bsmes

"bsme"代表"反斜杠me",bsme关键字是 与tex中的关键字完全相同的一个,除了没有反斜杠。 它产生与对应的tex关键字完全相同的结果。 有关所有bsme关键字的列表,请参阅config.py模块。

内置

所谓的"内置"关键字与任何现有的tex关键字都不对应。 他们不接受任何论据,只是直接翻译成 一串特克斯,他们的目的是以某种方式给 键入某些常用的tex字符串。

特别是,vertex的目标之一是让您可以选择 当你打字的时候手指放在主排上,因此内置的 关键字提供了许多与通常 包含非字母字符。例如,inv(用于"inverse")生成 ^{-1}squ(表示"平方")产生^2

有关所有内置组件的列表,请参阅config.py模块。

希腊语

希腊字母在数学上离我们的心很近很近。他们应该 打字要容易。 在vertex中,每个希腊字母(包括变体)都有一个 三个字母的名称。是的,这甚至包括那些名字 通常只有两个字母长,像π和μ!

例如,可以为alpha键入alp,为lambda键入lam,或者 lam用于大写lambda。

您可以为varepsilon键入vep(每个人都喜欢的epsilon)。 和vph用于varphi

对于PI、XI、MU和NU,这些字母有三个字母拼写。 (任何人只要pie?)为了绕过自动订阅机制 讨论如下。

如往常一样,请查阅config.py以获取完整的列表。

如果你不想的话,你必须使用这些缩写。 名字通常比两个字母长的希腊字母 同时也是一个bsme关键字,所以请直接拼出来 想要,无论是alphalambda,还是omega

括号单词

在tex中有许多结构,其中一个关键字接受参数 被大括号包围。例如,

\frac{\pi}{4}

得到Bhaskara-Leibniz级数的和。在顶点,相同 通过

frac pie over 4;

在本例中,fracover,最后的分号用作 括号中的单词

一般来说,当一个构造接受参数时,参数 将被适当的括号词包围。在很大程度上, 最后一个括号单词将是分号。

Vertex中所有此类结构的列表可以在config.py中找到, 在unarynodesbinarynodestertiarynodesrangenodes下 定义。它包括许多流行的结构,例如 集合,序列,地板,天花板,绝对值,"mod"表达式, 勒让德符号、二项式系数、和、积等。

字体(和装饰符)前缀

从技术上讲,字体前缀本身并不是"关键字"。他们是 两个或三个字符的前缀,后跟字母表中的一个字母时, 用适当的字体写出那封信。它们的前缀和字体 可在config.py

中找到对应的。

例如,而不是

\mathfrak{p} \mathsf{M} \mathbf{v} \mathbb{Q} \mathcal{O} \mathscr{B}

您可以键入

frp sfM bfv bbQ calO scrB

为了达到同样的目的。

您还可以使用前缀来获取诸如帽子和平铺之类的内容。例如, 而不是\hat{x}只需键入hatx

自动下标(和上标)

在数学中,下标变量是领域的硬币,因此 应该很容易打出来。顶点使下标变得快速和容易 还有上标。例如,

<表><广告>繁琐的纹理…。…在顶点中很容易 < /广告><正文>一个单元1,一个单元2,多个单元,一个单元n+1}A1、A2、DDD、AN+1x{i{u 1}、x{i{u 2}、\ldots、x{i{u m}xiv1、xiv2、ddd、xivvma{i j}^2aijuu2

半自动下标和上标机制 Vertex非常方便,正如表中的示例所示,它使 更容易键入某些常见的下标和上标。

而许多下标和上标的组合可以通过 SSS,有些事情是不可能的。在这种情况下,您可以使用subsup 括号中的单词,甚至可以使用标准的tex语法。

sss过程的完整描述有点复杂,但是对于大多数 共同的目的很简单。因此在我们给出详细的 具体流程,我们考虑主要思路。

首先我们需要一些术语。我们都知道下标和上标 是的,但是我们怎么称呼他们所附的信呢?我们称之为"基地"。

在大多数情况下,处理过程很简单:vertex将使用一个单词w并将其拆分为 w=bs,其中b是与字母匹配的w的最长初始段 name和s是剩下的一切。然后b将是基,并且s 将是下标。

示例(和一个非示例):

<表><广告>顶点纹理< /广告><正文>pip\i字母 \alpha nbbzm\mathbb{z}\u mcn+1c{n+1}ai,ja{i,j}zeta\zeta

关于这些示例,需要注意以下几点:

  1. 它使得pi可以用于我们给出的自动订阅 希腊字母pi(无可否认有点傻)拼写pie。正在写入p\i 对于使用素数的人来说,可能是每天都会发生的事情,并且 其中包括许多数学家。

  2. 带有扩展名的字母,如alpha,以及带有字体前缀的字母 前面,如bbz将被视为初始字母。

  3. 逗号以及加号和减号被视为单词的一部分。

  4. 发生了什么事内德和泽塔?也许我们希望这能翻译成 toz\eta,但vertex当然匹配整个单词zeta作为基。 有一种方法可以解决这个问题,我们在下面讨论。预览:您可以键入 zvveta以便获得z\eta

细节

对于顶点解析器,"单词"也由字母数字字符组成 作为逗号和加号和减号。必须以字母开头 性格。(换句话说是"字母",但这意味着 字符类[a-za-z],不要与所有的东西混淆 在顶点中可以被认为是"字母",其中包括,例如, 希腊字母和带有字体前缀的字母。)

对于熟悉正则表达式的人来说,这意味着 是基于字符类构建的

[A-Za-z0-9+-,]

最后三个符号包含在字符类中,因为它们是 下标中常见。 (但是,这意味着如果不想意外触发下标, 您需要在这些字符的至少一侧加上空格!)

现在假设w是vertex必须处理的下一个单词。如果w失败 以任何形式匹配 关键字-bsme、内置、括号单词或字体前缀字母组合-然后w是 提交给SSS流程。

顶点首先匹配w开头可能最长的字母名, 如上所述。让单词w由首字母b组成,后跟 余数s,即w=bs。然后b将是基,并且s将给出一个或 更多下标和/或上标。

在最简单的情况下,s只是表示一个下标。但是有可能 使用特殊字符序列在下标和上标之间切换 vvuuuu

几个例子说明了使用这些控制序列的所有方法:

<表><广告>顶点纹理< /广告><正文>auura^raiuura\u i^rauurvvka^{r\u k}aivvj一个{i}aivvjuur一个{i^r\u j}aivvjuur一个{i}^rzvvetaz\eta

规则是:

  • sequencevv打开更深的下标。在tex中,就好像您键入了{
  • sequenceuu关闭下标并打开上标。在德州 尽管你输入了}^{
  • seuqneceuu关闭两个下标并打开一个上标。在德州 尽管你输入了}^{
  • 一个特殊的例外是,如果vvs的开头使用, 它只会让你保持在第一个下标级别。因此,zvveta提供了一种方法 要生成z\eta,而zeta只需给出\zeta

同样,使用这些特殊的控制序列可能会吸引一些人,而 其他的例子,上面的例子看起来像是冰岛人。 (对我来说有点像——但我不知道冰岛人到底长什么样)。 随你便…这是下一节的主题。

只使用您想要的内容

顶点对普通纹理透明99%。 这意味着你可以(几乎)键入任何你想要的普通文本,它就会通过 通过顶点过滤器。所以,使用尽可能多或尽可能少的功能 顶点的值。

有什么问题?

主要问题是关键字和自动下标;但是解决方案 总是很简单:添加空格!

如果字符序列已匹配为顶点关键字,但是 不是您想要的,只需在这些字符之间留出一个或多个空格即可。

同样,如果自动订阅是在您不需要时进行的, 解决方法相同:用空格分隔字符。

安全网

作为一个"安全网",任何一个词的前缀都可以是double 反斜杠\\以允许该单词不经修改地通过顶点。 准确地说,如果单词有余数,那么这个,减去这两个 反斜杠,是什么会通过。如果只打两个反斜杠, 它们将以不变的方式传递(这在tex表环境中很有用)。 同时,任何以一个反斜杠开头的单词都会通过顶点。 完全不变,即前面的反斜杠仍然完整。 总而言之:

>>> from vertex2tex import *
>>> translate_snippet('bbQ(alp)')
'\\mathbb{Q}(\\alpha)'
0

其中w是至少一个字符长的单词。

但无论如何,您可能不需要使用它。

享受!

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

推荐PyPI第三方库


热门话题
java Android:在ListView上使用setOnItemClickListener   使用Netbeans 7.0连接到SQL Server的java正在挂起   java Spring3依赖项注入不适用于mule   java Flink SQL结果字段与LocalDateTime上请求的类型错误不匹配   java找不到文件的结尾   考虑到NamingStrategy,java有没有办法将字符串转换为JsonNode?   使用Netbeans/ant部署java(命令行)应用程序   java如何修复Spring引导多部分上载中的“所需请求部分不存在”   java在应用程序启动时通过引用获取映射未知目标实体属性异常   java形状旋转问题Java2d   Weblogic服务器上的java ExecuteAndWaitInterceptor问题   JavaSpringBoot:project将图像保存在错误的路径中,并且在使用IDEIntellji打开时不显示图像   类向java接口添加方法   Swing组件上的Java 7泛型   sql server如何从java获取用户名。sql。联系   java如何检查该行是否与正则表达式(regex)冲突?   java如何在spring引导安全中为计数失败登录设置验证登录为false   图像如何在Java中使PNG的白色透明?