# ![mdmath](img/icon.png) Markdown+Math
[![marketplace](https://vsmarketplacebadge.apphb.com/version/goessner.mdmath.svg)](https://marketplace.visualstudio.com/items?itemName=goessner.mdmath)
[![marketplace](https://vsmarketplacebadge.apphb.com/installs-short/goessner.mdmath.svg)](https://marketplace.visualstudio.com/items?itemName=goessner.mdmath)
[![License](https://img.shields.io/github/license/goessner/mdmath.svg)](https://github.com/goessner/mdmath/blob/master/LICENSE.txt)
[![npm](https://img.shields.io/npm/v/mdmath.svg)](https://www.npmjs.com/package/mdmath)
## What is it ...
**mdmath** allows to use *Visual Studio Code* as a markdown editor capable of typesetting and rendering TeX math.
In fact it now reuses the built in markdown viewer. KaTeX works inside as a fast math renderer.
You can install the extension directly from [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=goessner.mdmath).
## Features
Simplify the process of authoring and live previewing markdown documents containing math formulas.
This extension is a comfortable tool for scientists, engineers and students with markdown as their first choice
document format.
* Inline math
* Display math
* Formula numbering
* Inline math with tables
* Export resulting HTML code for web usage
### What is new in **mdmath** 2.0 ...
* Integrated in native markdown viewer. So after installing the extension, TeX math is properly displayed in the markdown preview window.
* Based on [markdown-it](https://github.com/markdown-it/markdown-it) plugin [markdown-it-texmath](https://github.com/goessner/markdown-it-texmath).
* Using vscode's [Markdown Extension API](https://code.visualstudio.com/docs/extensionAPI/api-markdown).
* Editor view and Preview are synchronized while scrolling.
* Heavily reduced code size.
* Works offline.
* Due to [markdown-it-texmath's](https://github.com/goessner/markdown-it-texmath) support of different formula delimiters, these are also available and user configurable with mdmath:
* `dollars` (default)
* inline `$...$`
* display `$$...$$`
* `brackets`
* inline `\(...\)`
* display `\[...\]`
* `gitlab`
* inline ``$`...`$``
* display ` ```math ... ``` `
![mdmath editing](./img/mdmath.gif)
## Installation ...
### ... from inside of VSCode
Press F1 key inside of *Visual Studio Code* and type `extension`. Choose `Extensions: Install Extension`
and then select the `Markdown+Math` extension from the list.
### ... from Mac & Linux Command Line
```
cd $HOME/.vscode/extensions
git clone https://github.com/goessner/mdmath.git
cd mdmath
npm install
```
### ... from Windows Command Line
```
cd %USERPROFILE%\.vscode\extensions
git clone https://github.com/goessner/mdmath.git
cd mdmath
npm install
```
## Usage
* Launch *VS Code*, create or open a markdown file (`.md`).
* Open a preview window.
* Typeset in your markdown source window and see the preview window live updating.
* Press Ctrl+K . or run the command `Clip Markdown+Math to HTML` to copy the
corresponding HTML source to the underlying systems clipboard.
## Default User Settings
```json
// Path to custom stylesheet file (css).
"mdmath.delimiters": "dollars"
```
## Dependencies
* [`markdown-it`](https://github.com/markdown-it/markdown-it): The markdown renderer also used in VS Code.
* [`katex`](https://github.com/Khan/KaTeX): This is where credits for fast rendering TeX math in HTML go to.
* [`clipboardy`](https://github.com/sindresorhus/clipboardy): Access the system clipboard (copy/paste).
## FAQ
* __Formula highlighting is broken ?__
* Math formula highlighting is experimental.
* It is implemented only for `$` delimiters at present.
* `$` characters in markdown text are sometimes confused with math delimiters. Enclose them by backticks (`) then.
* Formula highlighting is possible only for formulas on a single line. It breaks with every newline character.
* Math highlighting is completely different from LaTeX math parsing.
* __Which functions does KaTeX support ?__
* See them listed at [KaTeX Reference](https://khan.github.io/KaTeX/docs/supported.html).
* __What if I need to use the currency symbol `$` also in my markup ?__
* It should be safe to use it. If in doubt escape it.
* __What are the restrictions with inline formulas ?__
* Whitespace after opening `$` and before closing `$` is not allowed.
* Numeric character before opening `$` and after closing `$` is not allowed.
* At least one character (whitespace ?) is required between two consecutive inline formulas.
* Line break inside is not allowed.
* __What are the restrictions with display formulas ?__
* Not allowed inline of text.
* Blank lines before and behind required.
* Restrictions for inline formulas do not apply.
* __Can I use math markup in blockquotes ?__
* We can use inline and display formulas in blockquote sections. In order to avoid the blockquote symbol `'>'` being part of a multiline display formula, display formulas have to be written on a single line in blockquote sections.
* Opening display formula in blockquote section and closing formula on a line behind the blockquote section resulted in a fatal error until VSCode 1.26.0. Now it is safe to do so.
* __Can I use math markup in code blocks ?__
* No, math markup in code blocks is shown - as expected - as markup. This is consistent now, but in contrast to `mdmath` versions prior to 2.0.
* __Can I access the HTML source of the markdown file ?__
* Yes. Use the Markdown: Clip Markdown+Math to Html command or the key binding (`'ctrl+K .'`).
* The markdown preview window has to be opened once for this in order to function properly.
* You need to have the markdown source window activated here (not the preview window!).
* Please note, that the resulting HTML source references 'CDN'-located remote css files. Change those references to local URL's if necessary.
* __Is PDF output supported ?__
* Not directly. In order to create `*.pdf` output from your Markdown you can create a `*.html` document first and print it then using a `PDF` printer or use [Pandoc](http://pandoc.org/).
* See [Compiling Markdown into HTML](https://code.visualstudio.com/docs/languages/markdown).
* __Can I use custom CSS styles for the preview window ?__
* Yes. Set `mdmath.style` in user settings to the location of your custom CSS file. Its path must be relative to this extension root.
* __Cannot copy to clipboard on Linux ?__
* This may be because the upstream `clipboardy` needs `xsel` on Linux. Run `sudo apt-get install xsel` to install.
* __Can we store Latex macros with mdmath ?__
* Yes, there is a new section `mdmath.globalMacros` in `package.json`. Try to expand it with your own macros.
## Thank You
The following folks helped to make `mdmath` even better.
* [colinfang](https://github.com/colinfang): Implemented global Macros with mdmath 2.3.0.
* [lincr](https://github.com/LCAR979): Helped with fixing problems with `mdmath.clipToHtml` under Ubuntu.
* [TonySFU](https://github.com/TonySFU): Helped with fixing encoding problems with Chinese language under macOS when using `mdmath.clipToHtml`.
* [floatdrop](https://github.com/floatdrop): Verifying that [clipboardy](https://github.com/sindresorhus/clipboardy) is a better alternative to `copy-paste` by implementing.
* [zhanglix](https://github.com/zhanglix): Helped with fixing the `newline` bug with `gitlab` delimiters.
## Contributing
See [`.github/CONTRIBUTING.md`](.github/CONTRIBUTING.md)
## Changelog
See [`changelog.md`](changelog.md)
## License
*Markdown+Math* for VS Code is licensed under the [MIT License](http://opensource.org/licenses/MIT)
© [Stefan Gössner](https://github.com/goessner)