Giter Site home page Giter Site logo

gipplab / vmext Goto Github PK

View Code? Open in Web Editor NEW
8.0 14.0 5.0 4.57 MB

vmext: A Visualization Tool for Mathematical Expression Trees

Home Page: http://vmext.wmflabs.org

License: Apache License 2.0

Ruby 0.17% JavaScript 98.86% CSS 0.16% HTML 0.52% Dockerfile 0.01% Pug 0.28%
syntax-tree abstract-syntax-tree mathematics formulae expression-tree visualization

vmext's Introduction

Build Status Coverage Status npm

VMEXT: A Visualization Tool for Mathematical Expression Trees

Mathematical expressions can be understood and represented as a tree consisting of functions (non-leaf nodes) and their arguments (child nodes of function nodes). Such expression trees are an important concept to store and process mathematical expressions as well as the most frequently used visualization of the structure of mathematical expressions.

Typically, researchers visualize expression trees with the help of general purpose tools that are not optimized for mathematics. This approach is laborious, redundant if mathematical expressions are available in a structured markup, such as MathML, and error-prone, since the visualization represents a researcher’s notion of what the markup of an expression should be, but not necessarily what the actual markup is.

VMEXT is a tool to automatically visualize mathematical expression trees from parallel MathML. By visualizing the actual markup of mathematical expressions, VMEXT enables content providers to quickly spot problems in the content MathML markup that do not affect the presentation of the expression. Identifying such discrepancies previously required reading the verbose and complex parallel MathML markup. VMEXT also allows to visualize similar and identical elements of two expressions using arbitrary similarity measures. Visualizing expression similarity shall support developers in designing retrieval approaches and enable improved interaction concepts for users of mathematical information retrieval systems. The similarity visualization allows designers and users of such systems to inspect the reasoning of a similarity measure, rather than exclusively being provided with a scalar similarity score as is the case for most current retrieval systems.

Setup

You may install VMEXT using npm like so: npm i && npm start.

Alternatively, you may use YARN which speeds up the installation and deployment processes, saves disk space by removing duplicate packages, and locks all package dependencies - not only the top level dependencies like npm does. For further information, see YARN

To install Yarn, follow the Installation Guide for your platform.

To install all dependencies, navigate to the project root and run: yarn

After that, you can run the server using yarn start

To use use a local mathoid installation install mathoid locally from npm and change the mathoidUrl in the config.

Debugging

To debug the app, use ChromeDevTools, run yarn run debug and copy the link into a browser.

Modules

The lib directory contains a number of libraries we we developed to maintain a clean project structure.

To avoid long relative paths like ../../../lib/logger, we use the app-module-path package. The package adds the project's root directory to the require call. This allows you to require any module unsing a path starting relative to the project's root e.g require('lib/logger'), eben in deeply nested project structures.

Deployment

We use Capistrano for deployment. To deploy (the master branch) type cap production deploy. For a simple rollback cap production deploy:rollback

vmext's People

Contributors

greenkeeper[bot] avatar jonaskress avatar luislacker avatar nmeuschke avatar physikerwelt avatar smalyshev avatar snyk-bot avatar stkfd avatar thanathan-k avatar thiemowmde avatar vstange avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vmext's Issues

Render AST: "SecurityError: Permission denied to access property ..."

@physikerwelt reported a CORS issue in HyPlag (https://github.com/ag-gipp/hyplag-frontend/issues/36) which occurs whenever we try to render a single AST. This also occurs on our own demo at https://vmext-demo.wmflabs.org.

To Reproduce
Steps to reproduce the behavior:

  1. Go to https://vmext-demo.wmflabs.org
  2. Click on "Render AST".
  3. View the browser console for error message.

Expected behavior
Render AST should work in our demo.

Screenshots
Screenshot taken with firefox
auswahl_008

Tested on:

  • Firefox Quantum 60.x
  • Chrome 60.x

Additional context
More detailed issue is a "Blocked a frame with origin from accessing a cross-origin frame"A gGood answer on SO was: https://stackoverflow.com/questions/25098021/securityerror-blocked-a-frame-with-origin-from-accessing-a-cross-origin-frame

We may need to change our setup a bit?

  • Deploy vmext on a static server, so we a have no cross-sciptings?
  • No redirect - instead masked pass-through? (Don't know how.)

setup instructions

Originally reported by: Moritz Schubotz (Bitbucket: physikerwelt, GitHub: physikerwelt)


in the readme you write

Setup

This project relies on the new package manager for node called Yarn. To get started install Yarn globally via npm:

npm install -g yarn

To install all dependencies, head to project root and simply run: yarn Now you can run the server with yarn start

On the server I installed on Friday I could just run npm i && npm start. Please clarify in the readme why that does not work.


AST Renderer / Comparison not working

It seem our AST Renderer for comparing MathML is currently not working. See:

auswahl_007

Detailed Error Information is:

Type:   undefined
Description:   f is null
StatusCode:   undefined

Reproduce
Click "Render" on https://vmext.wmflabs.org/merged-asts.html

Don't know if we still use this example but the problem occurs also from HyPlag out whenever I try to compare two formulas via the the embedded script function. Do we need to handle this differently now? Then we should update our documentation likewise.

Additional context

Parser should also recognize MathML-Presentation annotation

When reviewing the Arvix results from Citeplag, it is noticeable that many formulas simply can not be read. At the moment only the following constellation is read:

<semantics>
  ... pmml
  <annotation-xml encoding="MathML-Content" ...>
    ... cmml
  </annotation>
</semantics>

VMEXT should also acknowledge the following constellation:

<semantics>
  ... cmml
  <annotation-xml encoding="MathML-Presentation" ...>
    ... pmml
  </annotation>
</semantics>

What should we do with math.citeplag.org?

http://math.citeplag.org still has a version online from 03/2017. At the moment the citeplag frontend relies on this URL API. I would like to change this towards (https://vmext.wmflabs.org/).

But what should we do with math.citeplag.org?

  • Keep a second separate server online (of course updated)
  • redirect towards vmext.wmflabs
  • close this url down
  • leave it be

@AndreG-P @physikerwelt @nmeuschke what is preferred by you?

I would go for a redirect at the moment.

remove yarn

it makes little sense to maintain both npm and yarn

Add logging

cytoscape currently does not throw erros and logs to the console instead.
Figure out if there is a way to check if there was an error in cytoscape an notify the user about that.

Internal error on "identical" comparison ("similar" works fine)

An internal error during an "identical" comparison occurred. Whereby if I try it as a "similar" comparison everything works fine. The example is quite easy: compare a+b against b+c. The corresponding MathML and similarities are as follows:

<math xmlns="http://www.w3.org/1998/Math/MathML" id="p1.1.m1.1" class="ltx_Math" alttext="a+b" display="inline"> <semantics id="p1.1.m1.1a"> <mrow id="p1.1.m1.1.4" xref="p1.1.m1.1.4.cmml"> <mi id="p1.1.m1.1.1" xref="p1.1.m1.1.1.cmml">a</mi> <mo id="p1.1.m1.1.2" xref="p1.1.m1.1.2.cmml">+</mo> <mi id="p1.1.m1.1.3" xref="p1.1.m1.1.3.cmml">b</mi> </mrow> <annotation-xml encoding="MathML-Content" id="p1.1.m1.1b"> <apply id="p1.1.m1.1.4.cmml" xref="p1.1.m1.1.4"> <plus id="p1.1.m1.1.2.cmml" xref="p1.1.m1.1.2"/> <ci id="p1.1.m1.1.1.cmml" xref="p1.1.m1.1.1">𝑎</ci> <ci id="p1.1.m1.1.3.cmml" xref="p1.1.m1.1.3">𝑏</ci> </apply> </annotation-xml> </semantics> </math>

<math xmlns="http://www.w3.org/1998/Math/MathML" id="p1.1.m1.1" class="ltx_Math" alttext="b+a" display="inline"> <semantics id="p1.1.m1.1a"> <mrow id="p1.1.m1.1.4" xref="p1.1.m1.1.4.cmml"> <mi id="p1.1.m1.1.1" xref="p1.1.m1.1.1.cmml">b</mi> <mo id="p1.1.m1.1.2" xref="p1.1.m1.1.2.cmml">+</mo> <mi id="p1.1.m1.1.3" xref="p1.1.m1.1.3.cmml">a</mi> </mrow> <annotation-xml encoding="MathML-Content" id="p1.1.m1.1b"> <apply id="p1.1.m1.1.4.cmml" xref="p1.1.m1.1.4"> <plus id="p1.1.m1.1.2.cmml" xref="p1.1.m1.1.2"/> <ci id="p1.1.m1.1.1.cmml" xref="p1.1.m1.1.1">𝑏</ci> <ci id="p1.1.m1.1.3.cmml" xref="p1.1.m1.1.3">𝑎</ci> </apply> </annotation-xml> </semantics> </math>

[ { "id": "p1.1.m1.1.4.cmml", "matches": [ { "id": "p1.1.m1.1.4.cmml", "assessment": 1, "type": "identical" } ] } ]

If I now change the similarity type to "similar" it works just fine. Why?

mathoid returns undefined for riemann-example

mathoid API returns undefined for Riemann example of simple AST widget.
Since mathoid seems to be accessible only within uni konstanz cluster, it's also hard to debug vmext locally (outside cluster), since mathoid has to be replaced by mathjax-node in order to work.

screen shot 2017-04-07 at 11 09 53

Missing node in a Merged AST

In the demo we use this comparison as an example:

<math xmlns="http://www.w3.org/1998/Math/MathML" id="p1.1.m1.1" class="ltx_Math" alttext="\EulerGamma@{z}=\Int{0}{\infty}@{t}{e^{-t}t^{z-1}}" display="inline"> <semantics id="p1.1.m1.1a"> <mrow id="p1.1.m1.1.4" xref="p1.1.m1.1.4.cmml"> <mrow id="p1.1.m1.1.1.8.2" xref="p1.1.m1.1.1.1.cmml"> <mpadded width="-1.7pt" id="p1.1.m1.1.1.2" xref="p1.1.m1.1.1.1.cmml"> <mi mathvariant="normal" id="p1.1.m1.1.1.2.1.2" xref="p1.1.m1.1.1.2.1.1.cmml">Γ</mi> </mpadded> <mo id="p1.1.m1.1.1.8.2a" xref="p1.1.m1.1.1.1.cmml">⁡</mo> <mrow id="p1.1.m1.1.1.8.2.1" xref="p1.1.m1.1.1.1.cmml"> <mo id="p1.1.m1.1.1.5" xref="p1.1.m1.1.1.1.cmml">(</mo> <mi id="p1.1.m1.1.1.6" xref="p1.1.m1.1.1.6.cmml">z</mi> <mo id="p1.1.m1.1.1.7" xref="p1.1.m1.1.1.1.cmml">)</mo> </mrow> </mrow> <mo id="p1.1.m1.1.2" xref="p1.1.m1.1.2.cmml">=</mo> <mrow id="p1.1.m1.1.3.8" xref="p1.1.m1.1.3.1.cmml"> <msubsup id="p1.1.m1.1.3.2.1.6" xref="p1.1.m1.1.3.2.1.1.cmml"> <mo largeop="true" symmetric="true" id="p1.1.m1.1.3.2.1.2" xref="p1.1.m1.1.3.2.1.1.1.cmml">∫</mo> <mn id="p1.1.m1.1.3.2.1.3.1" xref="p1.1.m1.1.3.2.1.3.1.cmml">0</mn> <mi mathvariant="normal" id="p1.1.m1.1.3.2.1.4.1" xref="p1.1.m1.1.3.2.1.4.1.cmml">∞</mi> </msubsup> <mo id="p1.1.m1.1.3.8a" xref="p1.1.m1.1.3.1.cmml">⁡</mo> <mrow id="p1.1.m1.1.3.8.1" xref="p1.1.m1.1.3.1.cmml"> <mpadded width="+1.7pt" id="p1.1.m1.1.3.4" xref="p1.1.m1.1.3.4.cmml"> <mrow id="p1.1.m1.1.3.4a" xref="p1.1.m1.1.3.4.cmml"> <msup id="p1.1.m1.1.3.4.6" xref="p1.1.m1.1.3.4.6.cmml"> <mi id="p1.1.m1.1.3.4.1" xref="p1.1.m1.1.3.4.1.cmml">e</mi> <mrow id="p1.1.m1.1.3.4.2.1" xref="p1.1.m1.1.3.4.2.1.cmml"> <mo id="p1.1.m1.1.3.4.2.1.1" xref="p1.1.m1.1.3.4.2.1.1.cmml">-</mo> <mi id="p1.1.m1.1.3.4.2.1.2" xref="p1.1.m1.1.3.4.2.1.2.cmml">t</mi> </mrow> </msup> <mo id="p1.1.m1.1.3.4.5" xref="p1.1.m1.1.3.4.5.cmml">⁢</mo> <msup id="p1.1.m1.1.3.4.7" xref="p1.1.m1.1.3.4.7.cmml"> <mi id="p1.1.m1.1.3.4.3" xref="p1.1.m1.1.3.4.3.cmml">t</mi> <mrow id="p1.1.m1.1.3.4.4.1" xref="p1.1.m1.1.3.4.4.1.cmml"> <mi id="p1.1.m1.1.3.4.4.1.1" xref="p1.1.m1.1.3.4.4.1.1.cmml">z</mi> <mo id="p1.1.m1.1.3.4.4.1.2" xref="p1.1.m1.1.3.4.4.1.2.cmml">-</mo> <mn id="p1.1.m1.1.3.4.4.1.3" xref="p1.1.m1.1.3.4.4.1.3.cmml">1</mn> </mrow> </msup> </mrow> </mpadded> <mo id="p1.1.m1.1.3.8.1.1" xref="p1.1.m1.1.3.1.cmml">⁢</mo> <mi mathvariant="normal" id="p1.1.m1.1.3.6" xref="p1.1.m1.1.3.1.cmml">d</mi> <mo id="p1.1.m1.1.3.8.1.1a" xref="p1.1.m1.1.3.1.cmml">⁢</mo> <mi id="p1.1.m1.1.3.7" xref="p1.1.m1.1.3.7.cmml">t</mi> </mrow> </mrow> </mrow> <annotation-xml encoding="MathML-Content" id="p1.1.m1.1b"> <apply id="p1.1.m1.1.4.cmml" xref="p1.1.m1.1.4"> <eq id="p1.1.m1.1.2.cmml" xref="p1.1.m1.1.2"/> <apply id="p1.1.m1.1.1.1.cmml" xref="p1.1.m1.1.1.8.2"> <csymbol cd="dlmf" id="p1.1.m1.1.1.2.1.1.cmml" xref="p1.1.m1.1.1.2.1.2">Euler-Gamma</csymbol> <ci id="p1.1.m1.1.1.6.cmml" xref="p1.1.m1.1.1.6">𝑧</ci> </apply> <apply id="p1.1.m1.1.3.1.cmml" xref="p1.1.m1.1.3.8"> <apply id="p1.1.m1.1.3.2.1.1.cmml" xref="p1.1.m1.1.3.2.1.6"> <csymbol cd="dlmf" id="p1.1.m1.1.3.2.1.1.1.cmml" xref="p1.1.m1.1.3.2.1.2">semantic-definite-integral</csymbol> <cn type="integer" id="p1.1.m1.1.3.2.1.3.1.cmml" xref="p1.1.m1.1.3.2.1.3.1">0</cn> <infinity id="p1.1.m1.1.3.2.1.4.1.cmml" xref="p1.1.m1.1.3.2.1.4.1"/> </apply> <ci id="p1.1.m1.1.3.7.cmml" xref="p1.1.m1.1.3.7">𝑡</ci> <apply id="p1.1.m1.1.3.4.cmml" xref="p1.1.m1.1.3.4"> <times id="p1.1.m1.1.3.4.5.cmml" xref="p1.1.m1.1.3.4.5"/> <apply id="p1.1.m1.1.3.4.6.cmml" xref="p1.1.m1.1.3.4.6"> <power xmlns:m="http://www.w3.org/1998/Math/MathML" xref="p1.1.m1.1.3.4.6"/> <ci id="p1.1.m1.1.3.4.1.cmml" xref="p1.1.m1.1.3.4.1">𝑒</ci> <apply id="p1.1.m1.1.3.4.2.1.cmml" xref="p1.1.m1.1.3.4.2.1"> <minus id="p1.1.m1.1.3.4.2.1.1.cmml" xref="p1.1.m1.1.3.4.2.1.1"/> <ci id="p1.1.m1.1.3.4.2.1.2.cmml" xref="p1.1.m1.1.3.4.2.1.2">𝑡</ci> </apply> </apply> <apply id="p1.1.m1.1.3.4.7.cmml" xref="p1.1.m1.1.3.4.7"> <power xmlns:m="http://www.w3.org/1998/Math/MathML" xref="p1.1.m1.1.3.4.7"/> <ci id="p1.1.m1.1.3.4.3.cmml" xref="p1.1.m1.1.3.4.3">𝑡</ci> <apply id="p1.1.m1.1.3.4.4.1.cmml" xref="p1.1.m1.1.3.4.4.1"> <minus id="p1.1.m1.1.3.4.4.1.2.cmml" xref="p1.1.m1.1.3.4.4.1.2"/> <ci id="p1.1.m1.1.3.4.4.1.1.cmml" xref="p1.1.m1.1.3.4.4.1.1">𝑧</ci> <cn type="integer" id="p1.1.m1.1.3.4.4.1.3.cmml" xref="p1.1.m1.1.3.4.4.1.3">1</cn> </apply> </apply> </apply> </apply> </apply> </annotation-xml> </semantics> </math>

<math xmlns="http://www.w3.org/1998/Math/MathML" id="p1.1.m1.1" class="ltx_Math" alttext="\EulerGamma@{z}=\Int{0}{\infty}@{x}{e^{-x}t^{z-1}}" display="inline"> <semantics id="p1.1.m1.1a"> <mrow id="p1.1.m1.1.4" xref="p1.1.m1.1.4.cmml"> <mrow id="p1.1.m1.1.1.8.2" xref="p1.1.m1.1.1.1.cmml"> <mpadded width="-1.7pt" id="p1.1.m1.1.1.2" xref="p1.1.m1.1.1.1.cmml"> <mi mathvariant="normal" id="p1.1.m1.1.1.2.1.2" xref="p1.1.m1.1.1.2.1.1.cmml">Γ</mi> </mpadded> <mo id="p1.1.m1.1.1.8.2a" xref="p1.1.m1.1.1.1.cmml">⁡</mo> <mrow id="p1.1.m1.1.1.8.2.1" xref="p1.1.m1.1.1.1.cmml"> <mo id="p1.1.m1.1.1.5" xref="p1.1.m1.1.1.1.cmml">(</mo> <mi id="p1.1.m1.1.1.6" xref="p1.1.m1.1.1.6.cmml">z</mi> <mo id="p1.1.m1.1.1.7" xref="p1.1.m1.1.1.1.cmml">)</mo> </mrow> </mrow> <mo id="p1.1.m1.1.2" xref="p1.1.m1.1.2.cmml">=</mo> <mrow id="p1.1.m1.1.3.8" xref="p1.1.m1.1.3.1.cmml"> <msubsup id="p1.1.m1.1.3.2.1.6" xref="p1.1.m1.1.3.2.1.1.cmml"> <mo largeop="true" symmetric="true" id="p1.1.m1.1.3.2.1.2" xref="p1.1.m1.1.3.2.1.1.1.cmml">∫</mo> <mn id="p1.1.m1.1.3.2.1.3.1" xref="p1.1.m1.1.3.2.1.3.1.cmml">0</mn> <mi mathvariant="normal" id="p1.1.m1.1.3.2.1.4.1" xref="p1.1.m1.1.3.2.1.4.1.cmml">∞</mi> </msubsup> <mo id="p1.1.m1.1.3.8a" xref="p1.1.m1.1.3.1.cmml">⁡</mo> <mrow id="p1.1.m1.1.3.8.1" xref="p1.1.m1.1.3.1.cmml"> <mpadded width="+1.7pt" id="p1.1.m1.1.3.4" xref="p1.1.m1.1.3.4.cmml"> <mrow id="p1.1.m1.1.3.4a" xref="p1.1.m1.1.3.4.cmml"> <msup id="p1.1.m1.1.3.4.6" xref="p1.1.m1.1.3.4.6.cmml"> <mi id="p1.1.m1.1.3.4.1" xref="p1.1.m1.1.3.4.1.cmml">e</mi> <mrow id="p1.1.m1.1.3.4.2.1" xref="p1.1.m1.1.3.4.2.1.cmml"> <mo id="p1.1.m1.1.3.4.2.1.1" xref="p1.1.m1.1.3.4.2.1.1.cmml">-</mo> <mi id="p1.1.m1.1.3.4.2.1.2" xref="p1.1.m1.1.3.4.2.1.2.cmml">x</mi> </mrow> </msup> <mo id="p1.1.m1.1.3.4.5" xref="p1.1.m1.1.3.4.5.cmml">⁢</mo> <msup id="p1.1.m1.1.3.4.7" xref="p1.1.m1.1.3.4.7.cmml"> <mi id="p1.1.m1.1.3.4.3" xref="p1.1.m1.1.3.4.3.cmml">t</mi> <mrow id="p1.1.m1.1.3.4.4.1" xref="p1.1.m1.1.3.4.4.1.cmml"> <mi id="p1.1.m1.1.3.4.4.1.1" xref="p1.1.m1.1.3.4.4.1.1.cmml">z</mi> <mo id="p1.1.m1.1.3.4.4.1.2" xref="p1.1.m1.1.3.4.4.1.2.cmml">-</mo> <mn id="p1.1.m1.1.3.4.4.1.3" xref="p1.1.m1.1.3.4.4.1.3.cmml">1</mn> </mrow> </msup> </mrow> </mpadded> <mo id="p1.1.m1.1.3.8.1.1" xref="p1.1.m1.1.3.1.cmml">⁢</mo> <mi mathvariant="normal" id="p1.1.m1.1.3.6" xref="p1.1.m1.1.3.1.cmml">d</mi> <mo id="p1.1.m1.1.3.8.1.1a" xref="p1.1.m1.1.3.1.cmml">⁢</mo> <mi id="p1.1.m1.1.3.7" xref="p1.1.m1.1.3.7.cmml">x</mi> </mrow> </mrow> </mrow> <annotation-xml encoding="MathML-Content" id="p1.1.m1.1b"> <apply id="p1.1.m1.1.4.cmml" xref="p1.1.m1.1.4"> <eq id="p1.1.m1.1.2.cmml" xref="p1.1.m1.1.2"/> <apply id="p1.1.m1.1.1.1.cmml" xref="p1.1.m1.1.1.8.2"> <csymbol cd="dlmf" id="p1.1.m1.1.1.2.1.1.cmml" xref="p1.1.m1.1.1.2.1.2">Euler-Gamma</csymbol> <ci id="p1.1.m1.1.1.6.cmml" xref="p1.1.m1.1.1.6">𝑧</ci> </apply> <apply id="p1.1.m1.1.3.1.cmml" xref="p1.1.m1.1.3.8"> <apply id="p1.1.m1.1.3.2.1.1.cmml" xref="p1.1.m1.1.3.2.1.6"> <csymbol cd="dlmf" id="p1.1.m1.1.3.2.1.1.1.cmml" xref="p1.1.m1.1.3.2.1.2">semantic-definite-integral</csymbol> <cn type="integer" id="p1.1.m1.1.3.2.1.3.1.cmml" xref="p1.1.m1.1.3.2.1.3.1">0</cn> <infinity id="p1.1.m1.1.3.2.1.4.1.cmml" xref="p1.1.m1.1.3.2.1.4.1"/> </apply> <ci id="p1.1.m1.1.3.7.cmml" xref="p1.1.m1.1.3.7">𝑥</ci> <apply id="p1.1.m1.1.3.4.cmml" xref="p1.1.m1.1.3.4"> <times id="p1.1.m1.1.3.4.5.cmml" xref="p1.1.m1.1.3.4.5"/> <apply id="p1.1.m1.1.3.4.6.cmml" xref="p1.1.m1.1.3.4.6"> <power xmlns:m="http://www.w3.org/1998/Math/MathML" xref="p1.1.m1.1.3.4.6"/> <ci id="p1.1.m1.1.3.4.1.cmml" xref="p1.1.m1.1.3.4.1">𝑒</ci> <apply id="p1.1.m1.1.3.4.2.1.cmml" xref="p1.1.m1.1.3.4.2.1"> <minus id="p1.1.m1.1.3.4.2.1.1.cmml" xref="p1.1.m1.1.3.4.2.1.1"/> <ci id="p1.1.m1.1.3.4.2.1.2.cmml" xref="p1.1.m1.1.3.4.2.1.2">𝑥</ci> </apply> </apply> <apply id="p1.1.m1.1.3.4.7.cmml" xref="p1.1.m1.1.3.4.7"> <power xmlns:m="http://www.w3.org/1998/Math/MathML" xref="p1.1.m1.1.3.4.7"/> <ci id="p1.1.m1.1.3.4.3.cmml" xref="p1.1.m1.1.3.4.3">𝑡</ci> <apply id="p1.1.m1.1.3.4.4.1.cmml" xref="p1.1.m1.1.3.4.4.1"> <minus id="p1.1.m1.1.3.4.4.1.2.cmml" xref="p1.1.m1.1.3.4.4.1.2"/> <ci id="p1.1.m1.1.3.4.4.1.1.cmml" xref="p1.1.m1.1.3.4.4.1.1">𝑧</ci> <cn type="integer" id="p1.1.m1.1.3.4.4.1.3.cmml" xref="p1.1.m1.1.3.4.4.1.3">1</cn> </apply> </apply> </apply> </apply> </apply> </annotation-xml> </semantics> </math>

[ { "id": "p1.1.m1.1.1.1.cmml", "matches": [ { "id": "p1.1.m1.1.1.1.cmml", "assessment": 1, "type": "identical" } ] }, { "id": "p1.1.m1.1.3.7.cmml", "matches": [ { "id": "p1.1.m1.1.3.4.3.cmml", "assessment": 1, "type": "identical" } ] }, { "id": "p1.1.m1.1.3.4.1.cmml", "matches": [ { "id": "p1.1.m1.1.3.4.1.cmml", "assessment": 1, "type": "identical" } ] }, { "id": "p1.1.m1.1.3.4.2.1.2.cmml", "matches": [ { "id": "p1.1.m1.1.3.4.3.cmml", "assessment": 1, "type": "identical" } ] }, { "id": "p1.1.m1.1.3.4.7.cmml", "matches": [ { "id": "p1.1.m1.1.3.4.7.cmml", "assessment": 1, "type": "identical" } ] } ]

The bound variable t from the left integral is missing.

Error on rendering for multiple matches on the same node

A small example is x+x and x+1 and we have two matches for x between these formulas. Currently this can not be rendered and instead a response 500 internal server error is given. Is this a direct conclusion from the explanations in issue #13?

<math xmlns="http://www.w3.org/1998/Math/MathML" id="p1.1.m1.1" class="ltx_Math" alttext="x+x" display="inline"> <semantics id="p1.1.m1.1a"> <mrow id="p1.1.m1.1.4" xref="p1.1.m1.1.4.cmml"> <mi id="p1.1.m1.1.1" xref="p1.1.m1.1.1.cmml">x</mi> <mo id="p1.1.m1.1.2" xref="p1.1.m1.1.2.cmml">+</mo> <mi id="p1.1.m1.1.3" xref="p1.1.m1.1.3.cmml">x</mi> </mrow> <annotation-xml encoding="MathML-Content" id="p1.1.m1.1b"> <apply id="p1.1.m1.1.4.cmml" xref="p1.1.m1.1.4"> <plus id="p1.1.m1.1.2.cmml" xref="p1.1.m1.1.2"/> <ci id="p1.1.m1.1.1.cmml" xref="p1.1.m1.1.1">𝑥</ci> <ci id="p1.1.m1.1.3.cmml" xref="p1.1.m1.1.3">𝑥</ci> </apply> </annotation-xml> </semantics> </math>

<math xmlns="http://www.w3.org/1998/Math/MathML" id="p1.1.m1.1" class="ltx_Math" alttext="x+1" display="inline"> <semantics id="p1.1.m1.1a"> <mrow id="p1.1.m1.1.4" xref="p1.1.m1.1.4.cmml"> <mi id="p1.1.m1.1.1" xref="p1.1.m1.1.1.cmml">x</mi> <mo id="p1.1.m1.1.2" xref="p1.1.m1.1.2.cmml">+</mo> <mn id="p1.1.m1.1.3" xref="p1.1.m1.1.3.cmml">1</mn> </mrow> <annotation-xml encoding="MathML-Content" id="p1.1.m1.1b"> <apply id="p1.1.m1.1.4.cmml" xref="p1.1.m1.1.4"> <plus id="p1.1.m1.1.2.cmml" xref="p1.1.m1.1.2"/> <ci id="p1.1.m1.1.1.cmml" xref="p1.1.m1.1.1">𝑥</ci> <cn type="integer" id="p1.1.m1.1.3.cmml" xref="p1.1.m1.1.3">1</cn> </apply> </annotation-xml> </semantics> </math>

[ { "id": "p1.1.m1.1.1.cmml", "matches": [ { "id": "p1.1.m1.1.1.cmml", "assessment": 1, "type": "identical" } ] }, { "id": "p1.1.m1.1.3.cmml", "matches": [ { "id": "p1.1.m1.1.1.cmml", "assessment": 1, "type": "identical" } ] } ]

Cannot use Node LTS 8

Cannot install packages with node version 8.10.0. Probably npm (v. 5.6.1) is the problem. It cannot find correct versions of packages(such as librsvg) online. Try to solve this issue via travis first.


DRMF-Beta information:
The service is currently running in a screen session (named \d.vmext) by physikerwelt. Type screen -r to login the session or

 screen -ls 
 screen -X -S <screen-session-name> quit

To kill the session.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.