├── .eslintrc.json ├── .gitignore ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── .yarnrc ├── CHANGELOG.md ├── LICENSE ├── README.md ├── demo └── demo.gif ├── package.json ├── resources ├── CascadiaCode.woff ├── CascadiaCode.woff2 ├── LatoBbb.woff ├── LatoBbb.woff2 ├── PunctCJK-Bold.woff ├── PunctCJK-Bold.woff2 ├── PunctCJK-BoldItalic.woff ├── PunctCJK-BoldItalic.woff2 ├── PunctCJK-Italic.woff ├── PunctCJK-Italic.woff2 ├── PunctCJK.woff ├── PunctCJK.woff2 ├── banana.css ├── favicon.ico ├── icon_dark.png ├── icon_light.png ├── katex │ ├── fonts │ │ ├── KaTeX_AMS-Regular.ttf │ │ ├── KaTeX_AMS-Regular.woff │ │ ├── KaTeX_AMS-Regular.woff2 │ │ ├── KaTeX_Caligraphic-Bold.ttf │ │ ├── KaTeX_Caligraphic-Bold.woff │ │ ├── KaTeX_Caligraphic-Bold.woff2 │ │ ├── KaTeX_Caligraphic-Regular.ttf │ │ ├── KaTeX_Caligraphic-Regular.woff │ │ ├── KaTeX_Caligraphic-Regular.woff2 │ │ ├── KaTeX_Fraktur-Bold.ttf │ │ ├── KaTeX_Fraktur-Bold.woff │ │ ├── KaTeX_Fraktur-Bold.woff2 │ │ ├── KaTeX_Fraktur-Regular.ttf │ │ ├── KaTeX_Fraktur-Regular.woff │ │ ├── KaTeX_Fraktur-Regular.woff2 │ │ ├── KaTeX_Main-Bold.ttf │ │ ├── KaTeX_Main-Bold.woff │ │ ├── KaTeX_Main-Bold.woff2 │ │ ├── KaTeX_Main-BoldItalic.ttf │ │ ├── KaTeX_Main-BoldItalic.woff │ │ ├── KaTeX_Main-BoldItalic.woff2 │ │ ├── KaTeX_Main-Italic.ttf │ │ ├── KaTeX_Main-Italic.woff │ │ ├── KaTeX_Main-Italic.woff2 │ │ ├── KaTeX_Main-Regular.ttf │ │ ├── KaTeX_Main-Regular.woff │ │ ├── KaTeX_Main-Regular.woff2 │ │ ├── KaTeX_Math-BoldItalic.ttf │ │ ├── KaTeX_Math-BoldItalic.woff │ │ ├── KaTeX_Math-BoldItalic.woff2 │ │ ├── KaTeX_Math-Italic.ttf │ │ ├── KaTeX_Math-Italic.woff │ │ ├── KaTeX_Math-Italic.woff2 │ │ ├── KaTeX_SansSerif-Bold.ttf │ │ ├── KaTeX_SansSerif-Bold.woff │ │ ├── KaTeX_SansSerif-Bold.woff2 │ │ ├── KaTeX_SansSerif-Italic.ttf │ │ ├── KaTeX_SansSerif-Italic.woff │ │ ├── KaTeX_SansSerif-Italic.woff2 │ │ ├── KaTeX_SansSerif-Regular.ttf │ │ ├── KaTeX_SansSerif-Regular.woff │ │ ├── KaTeX_SansSerif-Regular.woff2 │ │ ├── KaTeX_Script-Regular.ttf │ │ ├── KaTeX_Script-Regular.woff │ │ ├── KaTeX_Script-Regular.woff2 │ │ ├── KaTeX_Size1-Regular.ttf │ │ ├── KaTeX_Size1-Regular.woff │ │ ├── KaTeX_Size1-Regular.woff2 │ │ ├── KaTeX_Size2-Regular.ttf │ │ ├── KaTeX_Size2-Regular.woff │ │ ├── KaTeX_Size2-Regular.woff2 │ │ ├── KaTeX_Size3-Regular.ttf │ │ ├── KaTeX_Size3-Regular.woff │ │ ├── KaTeX_Size3-Regular.woff2 │ │ ├── KaTeX_Size4-Regular.ttf │ │ ├── KaTeX_Size4-Regular.woff │ │ ├── KaTeX_Size4-Regular.woff2 │ │ ├── KaTeX_Typewriter-Regular.ttf │ │ ├── KaTeX_Typewriter-Regular.woff │ │ └── KaTeX_Typewriter-Regular.woff2 │ └── katex.min.css ├── language │ ├── btex.tmGrammar.json │ └── language-configuration.json ├── logo.png └── snippets.json ├── src ├── BtexServer.ts ├── PanelManager.ts ├── ServePrinting.ts ├── extension.ts └── test │ ├── runTest.ts │ └── suite │ ├── extension.test.ts │ └── index.ts └── tsconfig.json /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "plugins": [ 9 | "@typescript-eslint" 10 | ], 11 | "rules": { 12 | "@typescript-eslint/naming-convention": "warn", 13 | "@typescript-eslint/semi": "warn", 14 | "curly": "warn", 15 | "eqeqeq": "warn", 16 | "no-throw-literal": "warn", 17 | "semi": "off" 18 | }, 19 | "ignorePatterns": [ 20 | "out", 21 | "dist", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | dist 3 | node_modules 4 | .vscode-test/ 5 | *.vsix 6 | yarn.lock 7 | .DS_Store 8 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "dbaeumer.vscode-eslint" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Run Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ], 15 | "outFiles": [ 16 | "${workspaceFolder}/out/**/*.js" 17 | ], 18 | "preLaunchTask": "${defaultBuildTask}" 19 | }, 20 | { 21 | "name": "Extension Tests", 22 | "type": "extensionHost", 23 | "request": "launch", 24 | "args": [ 25 | "--extensionDevelopmentPath=${workspaceFolder}", 26 | "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" 27 | ], 28 | "outFiles": [ 29 | "${workspaceFolder}/out/test/**/*.js" 30 | ], 31 | "preLaunchTask": "${defaultBuildTask}" 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 10 | "typescript.tsc.autoDetect": "off" 11 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$tsc-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never" 13 | }, 14 | "group": { 15 | "kind": "build", 16 | "isDefault": true 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | src/** 4 | .gitignore 5 | .yarnrc 6 | vsc-extension-quickstart.md 7 | **/tsconfig.json 8 | **/.eslintrc.json 9 | **/*.map 10 | **/*.ts 11 | demo/** 12 | -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | --ignore-engines true -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## 0.3.16 4 | 5 | - Bump btex version. 6 | - Implement `\includegraphics` 7 | 8 | ## 0.3.15 9 | 10 | - Upstream problems. 11 | 12 | ## 0.3.13-14 13 | 14 | - Fixed the problem where $\vec A$ doesn't show. 15 | 16 | ## 0.3.8-12 17 | 18 | - Upstream problems. 19 | 20 | ## 0.3.7 21 | 22 | - Tweaked CSS, prevented page break in TikZ diagrams. 23 | 24 | ## 0.3.6 25 | 26 | - Accidentally skipped a version 27 | - Hopefully the color inverting function is functioning logically now. 28 | - Tweaked some CSS. Too much configurable elements seems to make the code messy. 29 | 30 | ## 0.3.3-4 31 | 32 | - Miscellaneous improvements. 33 | 34 | ## 0.3.2 35 | 36 | - Fixed a bug that after switching to another text editor and back, inverse search stops working. 37 | - Displays `displayTitle`. 38 | 39 | ## 0.3.1 40 | 41 | - Formulas may return multiple lines when inverse searching. 42 | 43 | ## 0.3.0 44 | 45 | - Added inverse search. 46 | - HTML titles are reflected. 47 | 48 | ## 0.2.4 49 | 50 | - Reverted the overflow fix. It's not going to be solved soon. 51 | 52 | ## 0.2.3 53 | 54 | - Math formulae now overflows vertically. This may be problematic for some cases, but I don't see that yet. 55 | 56 | ## 0.2.2 57 | 58 | - Fixed #13 and #14. 59 | - Added styling for tables. 60 | 61 | ## 0.2.1 62 | 63 | - Added buttons for better UX. 64 | 65 | ## 0.2.0 66 | 67 | - You can now export to PDF or print directly. 68 | - Added simple snippets. 69 | 70 | ## 0.1.2 71 | 72 | - Attempt to fix the bug where `tikz2svg` processes may be orphaned. 73 | 74 | ## 0.1.1 75 | 76 | - `btex` is now lazy loaded, dramatically decreasing load time. 77 | - Added GIF demo. 78 | 79 | ## 0.1.0 80 | 81 | - Added icons. 82 | 83 | ## 0.0.x 84 | 85 | - Initial release. 86 | - Miscellanous improvements and bug fixes. 87 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2022 Trebor Huang 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vscode-btex 2 | 3 | VSCode integration for [bTeX](https://github.com/banana-space/btex). 4 | 5 | ![Demo](demo/demo.gif) 6 | 7 | - Use the "Compile and preview bTeX" button in the editor navigation bar to start. The rendered content will update on save. 8 | - Double click in the preview tab to jump to the corresponding line in the source code. 9 | - The "Export bTeX to PDF/printer" button 10 | will open a browser with a printing dialog. After you choose a suitable 11 | configuration, you can either print or export to PDF. 12 | 13 | ## Features 14 | 15 | - [X] Syntax highlights. (Needs more testing) 16 | - [X] Inverse search. 17 | - [X] Compiles the bTeX file and show the preview on save. 18 | - [X] Exports the result to PDF or printer. 19 | - [X] Use `\includegraphics{relative path}` to include graphics in the workspace folder. Weblinks and base64-encoded URIs are also accepted. 20 | 21 | ## Requirements 22 | 23 | - Install optionally [tikz2svg](https://github.com/banana-space/tikz2svg). This is used to render TikZ images. 24 | 25 | ## Extension Settings 26 | 27 | - `btex.command` and `btex.directory`: Used to specify the location of tikz2svg. You can leave blank to not let the plugin start up tikz2svg for you. 28 | - `btex.invertAll`: Color settings for formulas, see settings description. It is only relevant in dark themes. 29 | 30 | ## Known Issues 31 | 32 | - If there is an error "tikz2svg server exited with code 1 and signal null", it is most probably because there is another program (possibly another tikz2svg server) running, using the port 9292. 33 | - If you can still render tikz pictures, and you are sure you didn't start a tikz2svg server yourself, then this is because vscode failed to shut down the tikz2svg server last time. You can use the extension normally, and manually kill the tikz2svg server when you don't need it. 34 | - If you cannot render tikz pictures, check out which process is using the 9292 port, either terminate it or convince it to use another port instead. 35 | - Wiki templates do not work, because they are stored on wiki servers. I'm not going to implement local wiki templates either. Similarly wiki-style links will show up as blue but don't link anywhere. This means that images (which currently uses MediaWiki syntax) doesn't work. I might try to implement that, or I can get some separate image mechanics in. 36 | - Collapsible proofs do not work (yet) because it requires more javascript machinery. 37 | - `\includegraphics` doesn't work in formulas. 38 | - Inverse search doesn't work with graphics. A workaround is to click on elements close to them, e.g. captions. 39 | 40 | ## Release Notes 41 | -------------------------------------------------------------------------------- /demo/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/demo/demo.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-btex", 3 | "displayName": "vscode-btex", 4 | "description": "btex plugin for VSCode", 5 | "repository": "github:Trebor-Huang/vscode-btex", 6 | "publisher": "TreborHuang", 7 | "version": "0.3.15", 8 | "license": "MIT", 9 | "engines": { 10 | "vscode": "^1.68.0" 11 | }, 12 | "categories": [ 13 | "Snippets", 14 | "Programming Languages" 15 | ], 16 | "activationEvents": [], 17 | "main": "./out/extension.js", 18 | "contributes": { 19 | "commands": [ 20 | { 21 | "command": "vscode-btex.compile", 22 | "title": "Compile and preview bTeX", 23 | "shortTitle": "Preview", 24 | "icon": "$(open-preview)" 25 | }, 26 | { 27 | "command": "vscode-btex.export", 28 | "title": "Export bTeX to PDF/printer", 29 | "shortTitle": "Export", 30 | "icon": "$(rocket)" 31 | }, 32 | { 33 | "command": "vscode-btex.restart", 34 | "title": "Restart tikz2svg server" 35 | } 36 | ], 37 | "menus": { 38 | "editor/title": [ 39 | { 40 | "command": "vscode-btex.compile", 41 | "group": "navigation", 42 | "when": "editorLangId == btex" 43 | }, 44 | { 45 | "command": "vscode-btex.export", 46 | "group": "navigation", 47 | "when": "editorLangId == btex" 48 | } 49 | ] 50 | }, 51 | "languages": [ 52 | { 53 | "id": "btex", 54 | "extensions": [ 55 | ".btx", 56 | ".btex" 57 | ], 58 | "aliases": [ 59 | "bTeX", 60 | "btex" 61 | ], 62 | "configuration": "./resources/language/language-configuration.json", 63 | "icon": { 64 | "dark": "./resources/icon_dark.png", 65 | "light": "./resources/icon_light.png" 66 | } 67 | } 68 | ], 69 | "grammars": [ 70 | { 71 | "language": "btex", 72 | "scopeName": "source.btex", 73 | "path": "./resources/language/btex.tmGrammar.json", 74 | "embeddedLanguages": { 75 | "embedded.latex": "latex" 76 | } 77 | } 78 | ], 79 | "snippets": [ 80 | { 81 | "language": "btex", 82 | "path": "./resources/snippets.json" 83 | } 84 | ], 85 | "configuration": { 86 | "title": "Btex", 87 | "properties": { 88 | "btex.command": { 89 | "type": "string", 90 | "default": "", 91 | "description": "Command to start up tikz2svg server.\nIt usually should be `yarn start` or `yarn.cmd start` (on Windows).\nLeave empty to skip automatically starting up the server, you can still start the server manually." 92 | }, 93 | "btex.directory": { 94 | "type": "string", 95 | "default": "", 96 | "description": "Directory of tikz2svg server.\nThis is working directory where the command to start up the server will be run." 97 | }, 98 | "btex.invertAll": { 99 | "type": "boolean", 100 | "default": false, 101 | "description": "Whether to invert colors of math formulas in dark themes, including ordinary ones.\nIf set to false, only tikz diagrams (generated by tikz2svg) will be color inverted.\nThis makes colors consistent, but the theme color for foreground text will be ignored.\nClose the preview panel(s) and recompile to take effect." 102 | } 103 | } 104 | } 105 | }, 106 | "icon": "resources/logo.png", 107 | "scripts": { 108 | "vscode:prepublish": "yarn compile", 109 | "compile": "tsc -p ./", 110 | "watch": "tsc --watch -p ./", 111 | "pretest": "yarn run compile && yarn run lint", 112 | "lint": "eslint src --ext ts", 113 | "test": "node ./out/test/runTest.js", 114 | "test-compile": "tsc -p ./" 115 | }, 116 | "devDependencies": { 117 | "@types/glob": "^8.0.0", 118 | "@types/katex": "^0.14.0", 119 | "@types/mocha": "^9.1.1", 120 | "@types/node": "16.x", 121 | "@types/vscode": "^1.68.0", 122 | "@types/yargs": "^17.0.15", 123 | "@typescript-eslint/eslint-plugin": "^5.27.0", 124 | "@typescript-eslint/parser": "^5.27.0", 125 | "@vscode/test-electron": "^2.1.3", 126 | "eslint": "^8.16.0", 127 | "glob": "^8.0.3", 128 | "mocha": "^10.0.0", 129 | "typescript": "^4.7.2" 130 | }, 131 | "dependencies": { 132 | "btex": "github:banana-space/btex#7bcbc97b98d2cdbc21aa375295bfc2450c73cc1c" 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /resources/CascadiaCode.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/CascadiaCode.woff -------------------------------------------------------------------------------- /resources/CascadiaCode.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/CascadiaCode.woff2 -------------------------------------------------------------------------------- /resources/LatoBbb.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/LatoBbb.woff -------------------------------------------------------------------------------- /resources/LatoBbb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/LatoBbb.woff2 -------------------------------------------------------------------------------- /resources/PunctCJK-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/PunctCJK-Bold.woff -------------------------------------------------------------------------------- /resources/PunctCJK-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/PunctCJK-Bold.woff2 -------------------------------------------------------------------------------- /resources/PunctCJK-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/PunctCJK-BoldItalic.woff -------------------------------------------------------------------------------- /resources/PunctCJK-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/PunctCJK-BoldItalic.woff2 -------------------------------------------------------------------------------- /resources/PunctCJK-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/PunctCJK-Italic.woff -------------------------------------------------------------------------------- /resources/PunctCJK-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/PunctCJK-Italic.woff2 -------------------------------------------------------------------------------- /resources/PunctCJK.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/PunctCJK.woff -------------------------------------------------------------------------------- /resources/PunctCJK.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/PunctCJK.woff2 -------------------------------------------------------------------------------- /resources/banana.css: -------------------------------------------------------------------------------- 1 | html { 2 | margin: 0; 3 | padding: 0 0 20px; 4 | --main-latin-font: 'CMU Serif' 5 | } 6 | 7 | body { 8 | margin: 0; 9 | font-family: var(--main-latin-font, 'Noto Sans'), Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Oxygen', 'Ubuntu', 'Cantarell', 'Helvetica Neue', 'Microsoft YaHei UI', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Source Han Sans CN', sans-serif; 10 | background-color: var(--vscode-editor-background, #fff) 11 | } 12 | 13 | a { 14 | color: #1088c8 15 | } 16 | 17 | a:visited { 18 | color: #1088c8 19 | } 20 | 21 | .b-page-body { 22 | max-width: 1000px; 23 | margin: 0 auto 0 auto; 24 | padding: 0px 30px 30px 30px; 25 | font-size: 18px; 26 | font-family: PunctCJK, 'Noto Sans', Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Oxygen', 'Ubuntu', 'Cantarell', 'Helvetica Neue', 'Microsoft YaHei UI', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Source Han Sans CN', sans-serif; 27 | letter-spacing: .015em 28 | } 29 | 30 | .b-page-body:not(:lang(zh)) { 31 | font-family: var(--main-latin-font, 'Noto Sans'), Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Oxygen', 'Ubuntu', 'Cantarell', 'Helvetica Neue', 'Microsoft YaHei UI', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Source Han Sans CN', sans-serif; 32 | letter-spacing: normal 33 | } 34 | 35 | main { 36 | line-height: 1.8 37 | } 38 | 39 | .tright { 40 | float: right; 41 | clear: both 42 | } 43 | 44 | .tleft { 45 | float: right; 46 | clear: both 47 | } 48 | 49 | .invisible { 50 | display: none !important 51 | } 52 | 53 | .b-page-body a[href], 54 | .b-page-body btex-link { 55 | color: var(--vscode-textLink-foreground, #1088c8); 56 | text-decoration: none 57 | } 58 | 59 | .b-page-body a[href]:hover, 60 | .b-page-body a[href]:focus { 61 | color: var(--vscode-textLink-activeForeground, #1088c8); 62 | text-decoration: none; 63 | outline: none 64 | } 65 | 66 | .b-page-body a[href].external { 67 | color: var(--vscode-textLink-foreground, #1088c8); 68 | } 69 | 70 | .b-page-body a[href]:visited, 71 | .b-page-body a[href].external:visited { 72 | color: var(--vscode-textLink-foreground, #1088c8); 73 | } 74 | 75 | .b-page-body btex-link:hover, 76 | .b-page-body btex-link:focus, 77 | .b-page-body .btex-output a[href]:not(.image) { 78 | line-height: 1.2; 79 | border-bottom: 2px solid transparent; 80 | margin-bottom: -2px; 81 | border-bottom-color: transparent 82 | } 83 | 84 | .b-page-body btex-link:hover, 85 | .b-page-body btex-link:focus, 86 | .b-page-body .btex-output a[href]:not(.image):hover, 87 | .b-page-body .btex-output a[href]:not(.image):focus { 88 | border-bottom-color: var(--vscode-selection-background, #1088c850); 89 | } 90 | 91 | .b-page-body h2 { 92 | border: 0; 93 | padding: 10px 0; 94 | margin: 1.2em 0 .5em 0; 95 | font-size: 1.8em 96 | } 97 | 98 | .b-page-body h2 span.header-number { 99 | margin-right: .75em; 100 | font-weight: bold; 101 | padding: 4px 6px; 102 | border-bottom: 4px solid var(--vscode-focusBorder, #ffd000); 103 | } 104 | 105 | .b-page-body h3:not(#p-cactions-label) { 106 | font-size: 1.4em; 107 | padding: 0; 108 | margin-top: 1.2em; 109 | margin-bottom: .6em; 110 | font-weight: bold 111 | } 112 | 113 | .b-page-body h3:not(#p-cactions-label) span.header-number { 114 | margin-right: 1em 115 | } 116 | 117 | .b-page-body h4 { 118 | font-size: 1.2em; 119 | padding: 0; 120 | margin-top: 1em; 121 | margin-bottom: .6em 122 | } 123 | 124 | .b-page-body h4 span.header-number { 125 | margin-right: 1em 126 | } 127 | 128 | /* TODO Table of contents */ 129 | .b-page-body .toc { 130 | min-width: 10em; 131 | border: 0; 132 | padding: .7em 1.2em; 133 | line-height: 1.6 134 | } 135 | 136 | .b-page-body .toc:not(.ready) { 137 | display: none 138 | } 139 | 140 | .b-page-body .toc .toctitle { 141 | text-align: justify; 142 | font-size: 1.6em; 143 | margin-bottom: .8em 144 | } 145 | 146 | .b-page-body .toc ul li.toclevel-2 { 147 | padding-left: 1.5em 148 | } 149 | 150 | .b-page-body .toc ul li.toclevel-3 { 151 | padding-left: 3em 152 | } 153 | 154 | .b-page-body h1, 155 | .b-page-body h2, 156 | .b-page-body h3:not(#p-cactions-label), 157 | .b-page-body h4 { 158 | line-height: 1.4 159 | } 160 | 161 | .b-page-body code, 162 | .b-page-body pre { 163 | font-family: var(--vscode-editor-font-family, 'Cascadia Code', 'Consolas', 'Microsoft YaHei UI', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Source Han Sans CN', sans-serif); 164 | border: none; 165 | background-color: var(--vscode-textCodeBlock-background, #f4f6f8); 166 | line-height: 1.4; 167 | color: var(--vscode-editor-foreground, #666); 168 | font-size: 90% 169 | } 170 | 171 | .b-page-body code { 172 | margin: 0 3px; 173 | white-space: pre-wrap 174 | } 175 | 176 | .b-page-body pre { 177 | margin: 0; 178 | padding: .5em 1em; 179 | white-space: pre; 180 | overflow-x: auto 181 | } 182 | 183 | .b-page-body .identifier { 184 | font-family: var(--vscode-editor-font-family, 'Cascadia Code','Consolas','Microsoft YaHei UI','Microsoft YaHei','Noto Sans CJK SC','Source Han Sans CN',sans-serif); 185 | font-size: 90% 186 | } 187 | 188 | .b-page-body .code-btex { 189 | font-variant-ligatures: none 190 | } 191 | 192 | .b-page-body .code-btex .btex-function { 193 | color: #f87000 194 | } 195 | 196 | .b-page-body .code-btex .btex-argument { 197 | color: #30a0e0 198 | } 199 | 200 | .b-page-body .code-btex .btex-string { 201 | color: #70a000 202 | } 203 | 204 | .b-page-body .code-btex .btex-comment { 205 | color: #b0b0b0 206 | } 207 | 208 | .b-page-body img { 209 | max-width: 100%; 210 | height: auto 211 | } 212 | 213 | .b-page-body a.image { 214 | display: inline-block; 215 | max-width: 100% 216 | } 217 | 218 | .b-page-body table.list span.display-math { 219 | display: grid; 220 | grid-template-columns: max-content auto max-content 221 | } 222 | 223 | .b-page-body table.list span.display-math span.katex-display, 224 | .b-page-body table.list span.display-math svg { 225 | grid-column: 2 226 | } 227 | 228 | .b-page-body table.list span.display-math span.equation-tag-left { 229 | grid-column: 1 230 | } 231 | 232 | .b-page-body table.list span.display-math span.equation-tag-right { 233 | grid-column: 3 234 | } 235 | 236 | .b-page-body span.display-math svg { 237 | margin: 0 auto; 238 | max-width: 100% 239 | } 240 | 241 | .b-page-body span.display-math .overlay > svg { 242 | max-width: none; 243 | } 244 | 245 | .b-page-body .warningbox { 246 | margin: 0 0 16px 0; 247 | border: 0; 248 | padding: 1em 249 | } 250 | 251 | .b-page-body textarea#wpTextbox1:not(.b-unhide) { 252 | opacity: 0 253 | } 254 | 255 | .b-page-body .btex-monaco-container { 256 | height: 600px; 257 | margin: 0 -30px 258 | } 259 | 260 | .b-page-body .error { 261 | font-size: 100% 262 | } 263 | 264 | .b-page-body .mw-editTools, 265 | .b-page-body .templatesUsed, 266 | .b-page-body .hiddencats, 267 | .b-page-body .limitreport { 268 | display: none 269 | } 270 | 271 | .b-page-body td.mw-enhanced-rc { 272 | font-family: var(--vscode-editor-font-family, 'Cascadia Code','Consolas','Microsoft YaHei UI','Microsoft YaHei','Noto Sans CJK SC','Source Han Sans CN',sans-serif); 273 | } 274 | 275 | div[lang]:lang(zh) .katex { 276 | font-size: 1.1em !important; 277 | letter-spacing: normal 278 | } 279 | 280 | div[lang]:not(:lang(zh)) .katex { 281 | font-size: 1em !important; 282 | letter-spacing: normal 283 | } 284 | 285 | .katex .cjk_fallback:not(.sizing):not(.fontsize-ensurer) { 286 | font-size: 90.91% 287 | } 288 | 289 | .b-page-body .katex { 290 | font-family: KaTeX_Main, var(--main-latin-font, 'Noto Sans'), Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Oxygen', 'Ubuntu', 'Cantarell', 'Helvetica Neue', 'Microsoft YaHei UI', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Source Han Sans CN', sans-serif 291 | } 292 | 293 | .b-page-body .katex .mathbb, 294 | .b-page-body .katex .textbb { 295 | font-family: Lato_Bbb, KaTeX_AMS 296 | } 297 | 298 | .btex-output { 299 | text-align: justify; 300 | hyphens: auto 301 | } 302 | 303 | .btex-output p, 304 | .btex-output .p, 305 | .btex-output table.list { 306 | margin: 0 0 1em 0 307 | } 308 | 309 | .btex-output .block, 310 | .btex-output tr.list-item, 311 | .btex-output h2, 312 | .btex-output h3, 313 | .btex-output h4 { 314 | transition: outline-color 600ms ease; 315 | outline-color: transparent; 316 | outline-offset: 5px 317 | } 318 | 319 | .btex-output .block { 320 | padding: .8em 1.2em; 321 | margin: 0 0 1em 0; 322 | background-color: var(--vscode-textBlockQuote-background, #f4f6f8); 323 | border-color: var(--vscode-textBlockQuote-border, #c0c4c8); 324 | border-left: 3px solid 325 | } 326 | 327 | .btex-output span.katex-display { 328 | margin: 0 329 | } 330 | 331 | .btex-output span.display-math { 332 | margin: 1em 0 333 | } 334 | 335 | .btex-output p:last-child, 336 | .btex-output .p:last-child, 337 | .btex-output table.list:last-child { 338 | margin-bottom: 0 339 | } 340 | 341 | .btex-output div.floatright { 342 | float: right; 343 | margin: 0 344 | } 345 | 346 | .btex-output table.list.footnotes { 347 | font-size: 75% 348 | } 349 | 350 | .btex-output p+table.list.list-no-sep-above { 351 | margin-top: -1em 352 | } 353 | 354 | .btex-output table.list { 355 | width: 100%; 356 | border-collapse: collapse 357 | } 358 | 359 | .btex-output table.list tr.list-item:not(:last-child)>td { 360 | padding-bottom: 1em 361 | } 362 | 363 | .btex-output table.list tr.list-item.list-item-no-sep>td { 364 | padding-bottom: 0 365 | } 366 | 367 | .btex-output table.list td { 368 | vertical-align: baseline 369 | } 370 | 371 | .btex-output table.list td.list-item-label { 372 | width: 1.5em; 373 | max-width: 16em; 374 | overflow-x: clip; 375 | white-space: nowrap; 376 | text-align: right; 377 | padding-right: 0.75em; 378 | user-select: none; 379 | -webkit-user-select: none 380 | } 381 | 382 | .btex-output table.list.subpage-list tr.list-item:not(:last-child)>td { 383 | padding-bottom: 0 384 | } 385 | 386 | .btex-output table.list.subpage-list td.list-item-label { 387 | display: none 388 | } 389 | 390 | .btex-output table.list.subpage-list tr.list-item-indent-1>td:last-child { 391 | padding-left: 1.5em 392 | } 393 | 394 | .btex-output table.list.subpage-list tr.list-item-indent-2>td:last-child { 395 | padding-left: 3em 396 | } 397 | 398 | .btex-output table.list.subpage-list tr.list-item-indent-3>td:last-child { 399 | padding-left: 4.5em 400 | } 401 | 402 | .btex-output .table-wrapper { 403 | display: inline-block; 404 | max-width: 100%; 405 | overflow-x: auto 406 | } 407 | 408 | .btex-output span.display-math { 409 | display: flex; 410 | flex-direction: row; 411 | align-items: baseline; 412 | justify-content: stretch 413 | } 414 | 415 | .btex-output span.display-math.tikz-in-math { 416 | align-items: center 417 | } 418 | 419 | .btex-output span.display-math span.katex-display { 420 | flex-grow: 1; 421 | overflow-x: auto; 422 | overflow-y: hidden 423 | } 424 | 425 | .btex-output span.display-math span.equation-tag-left, 426 | .btex-output span.display-math span.equation-tag-right { 427 | flex-shrink: 0; 428 | flex-grow: 0 429 | } 430 | 431 | .btex-output span.undefined-reference { 432 | font-weight: bold; 433 | color: #ff3000 434 | } 435 | 436 | /* TODO theorem styles here */ 437 | 438 | .btex-output .block.style-a { 439 | background: var(--vscode-textBlockQuote-background, #f4fcff); 440 | border-color: #a0e0ff 441 | } 442 | 443 | .btex-output .block.style-a span.item-header { 444 | color: #1088c8 445 | } 446 | 447 | .btex-output .block.style-a a span.item-header { 448 | color: #1088c8 449 | } 450 | 451 | .btex-output .block.style-a a.new span.item-header { 452 | color: #80b700 453 | } 454 | 455 | .btex-output .block.style-b { 456 | background: var(--vscode-textBlockQuote-background, #fffdf0); 457 | border-color: #ffd880 458 | } 459 | 460 | .btex-output .block.style-b span.item-header { 461 | color: #dc6700 462 | } 463 | 464 | .btex-output .block.style-b a span.item-header { 465 | color: #1088c8 466 | } 467 | 468 | .btex-output .block.style-b a.new span.item-header { 469 | color: #80b700 470 | } 471 | 472 | .btex-output .block.style-c { 473 | background: var(--vscode-textBlockQuote-background, #f2faf2); 474 | border-color: #a0e0a0 475 | } 476 | 477 | .btex-output .block.style-c span.item-header { 478 | color: #209020 479 | } 480 | 481 | .btex-output .block.style-c a span.item-header { 482 | color: #1088c8 483 | } 484 | 485 | .btex-output .block.style-c a.new span.item-header { 486 | color: #80b700 487 | } 488 | 489 | .btex-output .block.quotation { 490 | background: var(--vscode-textBlockQuote-background, #c0c4c8); 491 | border-color: var(--vscode-textBlockQuote-border, #606468); 492 | } 493 | 494 | .btex-output .proof, 495 | .btex-output .proof-collapsible { 496 | margin: 0 0 1em 0; 497 | overflow: hidden 498 | } 499 | 500 | .btex-output .proof-collapsible .proof-expander { 501 | position: absolute; 502 | cursor: pointer; 503 | margin-left: -20px 504 | } 505 | 506 | .btex-output .proof-collapsible .proof-expander.proof-expander-ellipsis { 507 | position: relative; 508 | top: -.1em; 509 | display: inline-flex; 510 | overflow-y: hidden; 511 | align-items: center; 512 | margin: 0 .5em; 513 | padding: 0 .6em; 514 | background-color: #f0f2f6; 515 | color: #a2a9b1; 516 | border-radius: .6em; 517 | height: 1em; 518 | user-select: none; 519 | -webkit-user-select: none 520 | } 521 | 522 | /* ! Note that collapsed/expanded is reversed temporarily */ 523 | .btex-output .proof-collapsible.proof-collapsible-expanded>.proof-content, 524 | .btex-output .proof-collapsible.proof-collapsible-expanded>.proof-expander-collapsing { 525 | display: none 526 | } 527 | 528 | .btex-output .proof-collapsible.proof-collapsible-collapsed>.proof-header, 529 | .btex-output .proof-collapsible.proof-collapsible-collapsed>.proof-expander-expanding { 530 | display: none 531 | } 532 | 533 | span.btex-diagram { 534 | display: inline-block 535 | } 536 | 537 | @media not print { 538 | #render-content span.btex-diagram >svg.overlay, 539 | #render-content span.tikz-in-math >svg { 540 | filter: invert(1); 541 | mix-blend-mode: difference; 542 | } 543 | 544 | #render-content[invert-all] .katex { 545 | color: #000; 546 | filter: invert(1); 547 | mix-blend-mode: difference 548 | } 549 | } 550 | 551 | span.btex-diagram span.cell, 552 | span.btex-diagram span.label { 553 | display: flex; 554 | position: relative; 555 | width: 0; 556 | height: 0; 557 | align-items: center; 558 | justify-content: center 559 | } 560 | 561 | span.btex-diagram .katex { 562 | font-size: 1em !important 563 | } 564 | 565 | span.btex-diagram .katex span.rlap { 566 | user-select: none 567 | } 568 | 569 | .wikitable { 570 | background-color: var(--vscode-editor-background, #f8f9fa); 571 | color: var(--vscode-foreground, #202122); 572 | margin: 1em 0; 573 | border: 1px solid var(--vscode-tree-tableColumnsBorder, #a2a9b1); 574 | border-collapse: collapse 575 | } 576 | 577 | .wikitable > tr > th,.wikitable > tr > td,.wikitable > * > tr > th,.wikitable > * > tr > td { 578 | border: 1px solid var(--vscode-tree-tableColumnsBorder, #a2a9b1); 579 | padding: 0.2em 0.4em 580 | } 581 | 582 | .wikitable > tr > th,.wikitable > * > tr > th { 583 | background-color: var(--vscode-list-inactiveSelectionBackground, #eaecf0); 584 | text-align: center 585 | } 586 | 587 | .wikitable > caption { 588 | font-weight: bold 589 | } 590 | 591 | /* Update when https://github.com/banana-space/banana-space/issues/7 is resolved */ 592 | @media print { 593 | .b-nav-wrapper,#siteNotice,.content__before-header,.content__namespaces-actions,footer { 594 | display: none 595 | } 596 | 597 | .b-page-body { 598 | box-shadow: none; 599 | padding: 0; 600 | font-size: 12px; 601 | width: calc(100% - 120px); 602 | padding: 0px 60px 60px 60px; 603 | } 604 | 605 | .tikz-in-math { 606 | page-break-inside: avoid; 607 | } 608 | 609 | h1,h2,h3,h4 { 610 | font-weight: normal 611 | } 612 | 613 | .nomobile { 614 | display: none 615 | } 616 | 617 | /* .btex-output span.display-math span.katex-display { 618 | overflow-x: visible; 619 | } */ 620 | } 621 | -------------------------------------------------------------------------------- /resources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/favicon.ico -------------------------------------------------------------------------------- /resources/icon_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/icon_dark.png -------------------------------------------------------------------------------- /resources/icon_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/icon_light.png -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_AMS-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_AMS-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_AMS-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_AMS-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_AMS-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_AMS-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Caligraphic-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Caligraphic-Bold.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Caligraphic-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Caligraphic-Bold.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Caligraphic-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Caligraphic-Bold.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Caligraphic-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Caligraphic-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Caligraphic-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Caligraphic-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Caligraphic-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Caligraphic-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Fraktur-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Fraktur-Bold.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Fraktur-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Fraktur-Bold.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Fraktur-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Fraktur-Bold.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Fraktur-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Fraktur-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Fraktur-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Fraktur-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Fraktur-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Fraktur-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-Bold.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-Bold.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-Bold.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-BoldItalic.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-BoldItalic.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-BoldItalic.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-Italic.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-Italic.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-Italic.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Main-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Main-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Math-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Math-BoldItalic.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Math-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Math-BoldItalic.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Math-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Math-BoldItalic.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Math-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Math-Italic.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Math-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Math-Italic.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Math-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Math-Italic.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_SansSerif-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_SansSerif-Bold.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_SansSerif-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_SansSerif-Bold.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_SansSerif-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_SansSerif-Bold.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_SansSerif-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_SansSerif-Italic.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_SansSerif-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_SansSerif-Italic.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_SansSerif-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_SansSerif-Italic.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_SansSerif-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_SansSerif-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_SansSerif-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_SansSerif-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_SansSerif-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_SansSerif-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Script-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Script-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Script-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Script-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Script-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Script-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size1-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size1-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size1-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size1-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size1-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size1-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size2-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size2-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size2-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size2-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size2-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size2-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size3-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size3-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size3-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size3-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size3-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size3-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size4-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size4-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size4-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size4-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Size4-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Size4-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Typewriter-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Typewriter-Regular.ttf -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Typewriter-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Typewriter-Regular.woff -------------------------------------------------------------------------------- /resources/katex/fonts/KaTeX_Typewriter-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/katex/fonts/KaTeX_Typewriter-Regular.woff2 -------------------------------------------------------------------------------- /resources/katex/katex.min.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.15.6"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} 2 | -------------------------------------------------------------------------------- /resources/language/btex.tmGrammar.json: -------------------------------------------------------------------------------- 1 | { 2 | "comment": "@popall?", 3 | "scopeName": "source.btex", 4 | "patterns": [ 5 | { "include": "#inlink" }, 6 | { "include": "#common" } 7 | ], 8 | "repository": { 9 | "inlink": { 10 | "contentName": "markup.underline.link", 11 | "begin": "\\[\\[", 12 | "end": "\\||\\]\\]", 13 | "beginCaptures": { 14 | "0": { "name": "delimiter" } 15 | }, 16 | "endCaptures": { 17 | "0": { "name": "delimiter" } 18 | }, 19 | "patterns": [ 20 | { "include": "#inlink.group" }, 21 | { "include": "#common" } 22 | ] 23 | }, 24 | "common": { 25 | "name": "embedded.latex", 26 | "patterns": [ 27 | { "include": "text.tex.latex" } 28 | ] 29 | }, 30 | 31 | "inlink.group": { 32 | "begin": "\\{", 33 | "end": "\\}", 34 | "beginCaptures": { 35 | "0": { "name": "delimiter.curly" } 36 | }, 37 | "endCaptures": { 38 | "0": { "name": "delimiter.curly" } 39 | }, 40 | "patterns": [ 41 | { "include": "#inlink.group" } 42 | ] 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /resources/language/language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | "lineComment": "%" 4 | }, 5 | "brackets": [], 6 | "autoClosingPairs": [ 7 | { 8 | "open": "{", 9 | "close": "}" 10 | }, 11 | { 12 | "open": "[", 13 | "close": "]" 14 | }, 15 | { 16 | "open": "(", 17 | "close": ")" 18 | }, 19 | { 20 | "open": "\\{", 21 | "close": "\\}" 22 | }, 23 | { 24 | "open": "\\[", 25 | "close": "\\]" 26 | }, 27 | { 28 | "open": "\\(", 29 | "close": "\\)" 30 | }, 31 | { 32 | "open": "`", 33 | "close": "'", 34 | }, 35 | { 36 | "open": "$", 37 | "close": "$", 38 | "notIn": [ 39 | "comment" 40 | ] 41 | } 42 | ], 43 | "surroundingPairs": [ 44 | [ 45 | "{", 46 | "}" 47 | ], 48 | [ 49 | "[", 50 | "]" 51 | ], 52 | [ 53 | "(", 54 | ")" 55 | ], 56 | [ 57 | "`", 58 | "'" 59 | ], 60 | [ 61 | "$", 62 | "$" 63 | ] 64 | ], 65 | "wordPattern": "\\\\(@*[a-zA-Z]*)|[^\\s\\d`~!@#$%^&*()\\-=_+[\\]{}\\\\\\|;:'\"<>,./?\\u0500-\\uffff]+", 66 | "indentationRules": { 67 | "increaseIndentPattern": "\\\\begin\\s*\\{[^\\{\\}\\\\]*\\}(?!.*\\\\(begin|end)\\s*\\{)", 68 | "decreaseIndentPattern": "^\\s*\\\\end\\s*\\{" 69 | }, 70 | "onEnterRules": [ 71 | { 72 | "beforeText": "\\\\begin\\s*\\{[^\\{\\}\\\\]*\\}(?!.*\\\\(begin|end)\\s*\\{)", 73 | "afterText": "^\\s*\\\\end\\s*\\{", 74 | "action": { 75 | "indent": "indentOutdent" 76 | } 77 | }, 78 | { 79 | "beforeText": "\\\\begin\\s*\\{[^\\{\\}\\\\]*\\}(?!.*\\\\(begin|end)\\s*\\{)", 80 | "action": { 81 | "indent": "indent" 82 | } 83 | }, 84 | { 85 | "beforeText": "\\$\\$\\s*$", 86 | "afterText": "^\\s*\\$\\$", 87 | "action": { 88 | "indent": "indentOutdent" 89 | } 90 | }, 91 | { 92 | "beforeText": "\\\\\\[\\s*$", 93 | "afterText": "^\\s*\\\\\\]", 94 | "action": { 95 | "indent": "indentOutdent" 96 | } 97 | }, 98 | { 99 | "beforeText": "\\\\\\(\\s*$", 100 | "afterText": "^\\s*\\\\\\)", 101 | "action": { 102 | "indent": "indentOutdent" 103 | } 104 | }, 105 | { 106 | "beforeText": "\\{\\s*$", 107 | "afterText": "^\\s*\\}", 108 | "action": { 109 | "indent": "indentOutdent" 110 | } 111 | }, 112 | { 113 | "beforeText": "^\\s*\\*\\s*$", 114 | "action": { 115 | "indent": "none" 116 | } 117 | }, 118 | { 119 | "beforeText": "^\\s*\\* .*$", 120 | "action": { 121 | "indent": "none", 122 | "appendText": "* " 123 | } 124 | } 125 | ] 126 | } -------------------------------------------------------------------------------- /resources/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Trebor-Huang/vscode-btex/39e5c98dd35a4c6072eb2cb0af3c9ce0cc2f542d/resources/logo.png -------------------------------------------------------------------------------- /resources/snippets.json: -------------------------------------------------------------------------------- 1 | { 2 | "Begin/End block": { 3 | "prefix": "\\begin", 4 | "body": [ 5 | "\\begin{$1}", 6 | "$2", 7 | "\\end{$1}" 8 | ], 9 | "description": "Create a begin/end pair" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/BtexServer.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import * as child_process from 'child_process'; 3 | 4 | export class BtexServer { 5 | server: child_process.ChildProcess | undefined = undefined; 6 | dispose() : void { 7 | console.log("bTeX: Shutting down."); 8 | this.server?.kill(); 9 | } 10 | 11 | startServer() : boolean { // Returns whether the server is started 12 | if (this.server !== undefined) { 13 | return true; 14 | } 15 | 16 | const config = vscode.workspace.getConfiguration('btex'); 17 | const bTeXcmd : string | undefined = config.get('command'); 18 | const bTeXcwd : string | undefined = config.get('directory'); 19 | // Get some settings 20 | 21 | if (bTeXcmd === '') { 22 | console.log('bTeX: Skipping server startup.'); 23 | return false; 24 | } 25 | if (bTeXcmd === undefined || bTeXcwd === undefined || bTeXcwd === '') { 26 | vscode.window.showErrorMessage("bTeX server path is not configured."); 27 | return false; 28 | } 29 | 30 | // Start up language server 31 | const [cmd, ...args] = bTeXcmd.split(' '); 32 | this.server = child_process.spawn(cmd, args, { 33 | detached: false, 34 | stdio: 'ignore', 35 | cwd: bTeXcwd // We can also just use yarn --cwd ... 36 | }); 37 | this.server.on('exit', (code, signal) => { 38 | vscode.window.showErrorMessage( 39 | `tikz2svg server exited with code ${code} and signal ${signal}.` 40 | ); 41 | this.server = undefined; 42 | }); 43 | this.server.on('error', (err) => { console.log(err); }); 44 | console.log('bTeX: Starting tikz2svg on pid', this.server.pid); 45 | return true; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/PanelManager.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import * as path from 'path'; 3 | import * as fs from 'fs'; 4 | // Type only imports 5 | import { Buffer } from 'buffer'; 6 | // Lazy loaded imports 7 | import { serve } from './ServePrinting'; 8 | import { runWorker } from 'btex'; 9 | var _runWorker : typeof runWorker; 10 | var _serve : typeof serve; 11 | 12 | const PREAMBLE = '\\enableincludegraphics'; // TODO 13 | const COMPILER_SETTINGS = { // compiler options 14 | maxErrors: 100, 15 | maxMacroExpansions: 50000, 16 | maxBuffer: 1000000, 17 | maxNesting: 1000, 18 | inline: false, 19 | equationMode: false, 20 | }; 21 | const RENDER_SETTINGS = { // rendering options 22 | inverseSearch: true, 23 | noKatex: false 24 | }; 25 | 26 | // Generate CSS for fonts 27 | function cssFonts(awvu: (file : string) => string) { 28 | return ` 29 | @font-face { 30 | font-family: 'Cascadia Code'; 31 | src: url(${awvu('CascadiaCode.woff2')}) format('woff2'), url(${awvu('CascadiaCode.woff')}) format('woff') 32 | } 33 | 34 | @font-face { 35 | font-family: Lato_Bbb; 36 | src: url(${awvu('LatoBbb.woff2')}) format('woff2'), url(${awvu('LatoBbb.woff')}) format('woff') 37 | } 38 | 39 | @font-face { 40 | font-family: PunctCJK; 41 | src: url(${awvu('PunctCJK.woff2')}) format('woff2'), url(${awvu('PunctCJK.woff')}) format('woff'); 42 | unicode-range: U+21-22, U+27-29, U+2C, U+2E, U+3A-3B, U+3F, U+2018-201A, U+201C-201E, U+2022, U+2026, U+2218, U+25AA-25AB, U+3001-3002, U+3008-300F, U+FF64 43 | } 44 | 45 | @font-face { 46 | font-family: PunctCJK; 47 | font-style: italic; 48 | src: url(${awvu('PunctCJK-Italic.woff2')}) format('woff2'), url(${awvu('PunctCJK-Italic.woff')}) format('woff'); 49 | unicode-range: U+21-22, U+27-29, U+2C, U+2E, U+3A-3B, U+3F, U+2018-201A, U+201C-201E, U+2022, U+2026, U+2218, U+25AA-25AB, U+3001-3002, U+3008-300F, U+FF64 50 | } 51 | 52 | @font-face { 53 | font-family: PunctCJK; 54 | font-weight: bold; 55 | src: url(${awvu('PunctCJK-Bold.woff2')}) format('woff2'), url(${awvu('PunctCJK-Bold.woff')}) format('woff'); 56 | unicode-range: U+21-22, U+27-29, U+2C, U+2E, U+3A-3B, U+3F, U+2018-201A, U+201C-201E, U+2022, U+2026, U+2218, U+25AA-25AB, U+3001-3002, U+3008-300F, U+FF64 57 | } 58 | 59 | @font-face { 60 | font-family: PunctCJK; 61 | font-weight: bold; 62 | font-style: italic; 63 | src: url(${awvu('PunctCJK-BoldItalic.woff2')}) format('woff2'), url(${awvu('PunctCJK-BoldItalic.woff')}) format('woff'); 64 | unicode-range: U+21-22, U+27-29, U+2C, U+2E, U+3A-3B, U+3F, U+2018-201A, U+201C-201E, U+2022, U+2026, U+2218, U+25AA-25AB, U+3001-3002, U+3008-300F, U+FF64 65 | }`; 66 | } 67 | 68 | function getResource(...name: string[]) { 69 | return path.join(PanelManager.extensionPath, 'resources', ...name); 70 | } 71 | 72 | async function gotoPosition(doc: vscode.TextDocument, col: vscode.ViewColumn, position: number[]) { 73 | await vscode.window.showTextDocument(doc, col); 74 | if (position.length === 0) { 75 | return; 76 | } 77 | await vscode.commands.executeCommand( 78 | 'revealLine', 79 | { 80 | lineNumber: position[0] - 1, 81 | at: 'center' 82 | } 83 | ); 84 | const editor = vscode.window.activeTextEditor; 85 | if (editor === undefined) { 86 | return; 87 | } 88 | editor.selections = [new vscode.Selection( 89 | editor.document.lineAt(position[0]-1).range.start, 90 | editor.document.lineAt(position[position.length-1]-1).range.end 91 | )]; 92 | } 93 | 94 | export class PanelManager implements vscode.Disposable { 95 | readonly doc: vscode.TextDocument; 96 | readonly workspaceFolder: string; 97 | readonly viewColumn: vscode.ViewColumn; 98 | readonly panel: vscode.WebviewPanel; 99 | private static _isInvertAll : boolean = false; 100 | private listener ?: vscode.Disposable; 101 | static extensionPath: string; 102 | static diags: vscode.DiagnosticCollection; 103 | static openPanels: PanelManager[] = []; 104 | 105 | constructor(editor: vscode.TextEditor) { 106 | this.viewColumn = editor.viewColumn ?? vscode.ViewColumn.Beside; 107 | this.doc = editor.document; 108 | this.workspaceFolder = vscode.workspace.workspaceFolders? vscode.workspace.workspaceFolders[0].uri.path : "/"; 109 | this.panel = vscode.window.createWebviewPanel( 110 | 'bTeXpreview', 111 | 'Preview bTeX', 112 | vscode.ViewColumn.Beside, 113 | { 114 | localResourceRoots: [ 115 | vscode.Uri.file( 116 | path.join(PanelManager.extensionPath, 'resources')), 117 | vscode.Uri.file( 118 | this.workspaceFolder 119 | ) 120 | ], 121 | enableScripts: true 122 | } 123 | ); 124 | this.initialize(); 125 | this.panel.onDidDispose( 126 | () => { // remove itself from openPanels list 127 | let i = PanelManager.openPanels.indexOf(this); 128 | if (i >= 0) { PanelManager.openPanels.splice(i, 1); } 129 | } 130 | ); 131 | } 132 | 133 | compile(printing=false): void { 134 | const text = this.doc.getText(); 135 | if (_runWorker === undefined) { 136 | _runWorker = require('btex').runWorker; 137 | } 138 | _runWorker(text, PREAMBLE, COMPILER_SETTINGS, RENDER_SETTINGS) 139 | .then(result => { 140 | const data : { 141 | lang ?: string, 142 | htmlTitle ?: string, 143 | displayTitle ?: string 144 | } = JSON.parse(result.data); 145 | const diagnostics : vscode.Diagnostic[]=[]; 146 | for (const err of result.errors) { 147 | // code:LINE:COL MSG 148 | const res = /^code:([0-9]+):([0-9]+) (.*)$/.exec(err); 149 | if (res === null || res.length !== 4) { 150 | vscode.window.showErrorMessage( 151 | 'Unknown btex error: ' + err 152 | ); // Most probably just "UNKNOWN" 153 | continue; 154 | } 155 | const pos = new vscode.Position( 156 | parseInt(res[1])-1,parseInt(res[2])-1 157 | ); // TODO better position (doc.getWordRangeAtPosition) 158 | const range = new vscode.Range(pos, pos); 159 | diagnostics.push(new vscode.Diagnostic(range, res[3])); 160 | } 161 | // Update errors (including clearing them) 162 | PanelManager.diags.set(this.doc.uri, diagnostics); 163 | // This guard prevents the contents from emptying. 164 | if (result.html !== '' || result.errors.length === 0) { 165 | let img_replacer = (match:string, opt:string, src:string, offset:any, string:any, group:any) => { 166 | console.log(src) 167 | let new_src = ""; 168 | if(/^https?:\/\/\w/.test(src) || /^data:image\/(.*);base64/.test(src)) 169 | { 170 | // web image or inline image 171 | new_src = src; 172 | } 173 | else if(/^(\w+\\)*.\w/.test(src)) 174 | { 175 | // TODO add image extension verification and error handling 176 | // relative dir 177 | if(printing) 178 | { 179 | let dir = path.join(this.workspaceFolder, src); 180 | let ext = path.extname(dir).substring(1); 181 | let base64Image = ""; 182 | let buf:Buffer = fs.readFileSync(dir); 183 | base64Image = buf.toString('base64'); 184 | new_src = `data:image/${ext};base64,${base64Image}`; 185 | } 186 | else { 187 | new_src = this.panel.webview.asWebviewUri(vscode.Uri.file(path.join(this.workspaceFolder, src))).toString(); 188 | } 189 | } 190 | return ` 198 | 199 | 200 | 201 | 202 | 203 | ${data.htmlTitle ?? 'Preview bTeX'} 204 | 205 | 206 |
207 | ${result.html} 208 |
209 | 213 | `; 214 | if (_serve === undefined) { 215 | _serve = require('./ServePrinting').serve; 216 | } 217 | _serve(html, PanelManager.extensionPath).then((port) => { 218 | vscode.env.openExternal( 219 | vscode.Uri.parse('http://localhost:' + port.toString()) 220 | ); 221 | }); 222 | } 223 | this.render(result.html, data); 224 | } else { 225 | // If the user wants to print, stop them! 226 | if (printing) { 227 | vscode.window.showErrorMessage( 228 | "Printing Empty File", 229 | { 230 | modal: true, 231 | detail: "The rendered result is empty, either because of error or your document is empty." 232 | } 233 | ); 234 | } 235 | } 236 | }).catch(reason => { 237 | // This is probably error unexpected by the btex engine 238 | vscode.window.showErrorMessage(reason); 239 | }); 240 | } 241 | 242 | initialize(): void { 243 | const awvu = (...name: string[]) => this.panel.webview.asWebviewUri( 244 | vscode.Uri.file(getResource(...name)) 245 | ).toString(); // shorthand for asWebviewUri. 246 | this.panel.webview.html = ` 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 |
255 |
256 | Loading... 257 |
258 |
259 | 303 | `; 304 | this.listener = this.panel.webview.onDidReceiveMessage( 305 | (data : {position: string}) => { 306 | gotoPosition( 307 | this.doc, 308 | this.viewColumn, 309 | data.position.split(',').map( 310 | str => parseInt(str) 311 | ) 312 | ); 313 | }); 314 | } 315 | 316 | render(content: string, data: { 317 | lang?: string, 318 | htmlTitle?: string, 319 | displayTitle?: string 320 | }): void { 321 | this.panel.title = data.displayTitle ?? 'Preview'; 322 | this.panel.webview.postMessage({ 323 | html : content, 324 | data : data, 325 | isInvertAll : PanelManager.isInvertAll 326 | }); 327 | } 328 | 329 | static set isInvertAll(value: boolean) { 330 | PanelManager._isInvertAll = value; 331 | for (const pm of PanelManager.openPanels) { 332 | pm.panel.webview.postMessage({ 333 | isInvertAll: value 334 | }); 335 | } 336 | } 337 | 338 | static get isInvertAll() { 339 | return PanelManager._isInvertAll; 340 | } 341 | 342 | dispose(): void { 343 | this.listener?.dispose(); 344 | this.panel.dispose(); 345 | } 346 | 347 | static compileCommand(printing=false): PanelManager | undefined { 348 | // Get active document 349 | const editor = vscode.window.activeTextEditor; 350 | if (editor === undefined) { 351 | vscode.window.showErrorMessage("No active text editor found."); 352 | return; 353 | } 354 | // Check old panels 355 | for (const pm of PanelManager.openPanels) { 356 | if (editor.document === pm.doc) { 357 | pm.panel.reveal(); 358 | pm.compile(printing); 359 | return; 360 | } 361 | } 362 | // Spawn new panel 363 | const pm = new PanelManager(editor); 364 | PanelManager.openPanels.push(pm); 365 | pm.compile(printing); 366 | return pm; 367 | } 368 | 369 | static closeDocument(doc: vscode.TextDocument): void { 370 | for (const pm of PanelManager.openPanels) { 371 | if (doc === pm.doc) { 372 | pm.dispose(); 373 | PanelManager.diags.delete(pm.doc.uri); 374 | return; 375 | } 376 | } 377 | } 378 | 379 | static updateDocument(doc: vscode.TextDocument): void { 380 | for (const pm of PanelManager.openPanels) { 381 | if (doc === pm.doc) { 382 | pm.compile(); 383 | return; 384 | } 385 | } 386 | } 387 | } 388 | -------------------------------------------------------------------------------- /src/ServePrinting.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as path from 'path'; 3 | import * as http from 'http'; 4 | import { AddressInfo } from 'net'; // types only 5 | 6 | export async function serve(content: string, extensionPath: string) : Promise { 7 | const server = http.createServer((req, res) => { 8 | if (req.url === '/') { 9 | res.writeHead(200, { 'Content-Type': 'text/html' }); 10 | res.end(content); 11 | } else { 12 | res.writeHead(200); 13 | const resource = path.join(extensionPath, 'resources', req.url ?? ''); 14 | fs.readFile(resource, (err, data) => { 15 | res.end(data, 'utf-8'); 16 | }); 17 | } 18 | }); 19 | setTimeout(() => { server.close(); }, 10000); // A generous 10 seconds 20 | server.listen(); 21 | return await new Promise((res, rej) => { 22 | server.on('listening', () => { 23 | res((server.address() as AddressInfo).port); 24 | }); 25 | }); 26 | } 27 | 28 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import * as path from 'path'; 3 | import { PanelManager } from './PanelManager'; 4 | import { BtexServer } from './BtexServer'; 5 | 6 | const server = new BtexServer(); 7 | 8 | export function activate(context: vscode.ExtensionContext) { 9 | console.log('bTeX: Active.'); 10 | 11 | // Give PanelManager the necessary info 12 | PanelManager.extensionPath = context.extensionPath; 13 | PanelManager.diags = vscode.languages.createDiagnosticCollection('btex'); 14 | context.subscriptions.push( 15 | // Register server to ensure disposal 16 | server, 17 | // Register diagonstics (i.e. "Problems" tab) 18 | PanelManager.diags, 19 | // Register compile command 20 | vscode.commands.registerCommand('vscode-btex.compile', 21 | () => { 22 | let pm = PanelManager.compileCommand(); 23 | if (pm !== undefined) { 24 | context.subscriptions.push(pm); 25 | } 26 | } 27 | ), 28 | // Register printing command 29 | vscode.commands.registerCommand('vscode-btex.export', 30 | () => { 31 | let pm = PanelManager.compileCommand(true); 32 | if (pm !== undefined) { 33 | context.subscriptions.push(pm); 34 | } 35 | } 36 | ), 37 | // Register restart command 38 | vscode.commands.registerCommand('vscode-btex.restart', 39 | server.startServer.bind(server)), 40 | // Update document on save 41 | vscode.workspace.onDidSaveTextDocument( 42 | PanelManager.updateDocument 43 | ), 44 | // Close preview panel on close document 45 | vscode.workspace.onDidCloseTextDocument( 46 | PanelManager.closeDocument 47 | ), 48 | // Update config 49 | vscode.workspace.onDidChangeConfiguration( 50 | (event) => { 51 | if (event.affectsConfiguration('btex')) { 52 | PanelManager.isInvertAll = vscode.workspace 53 | .getConfiguration('btex') 54 | .get('invertAll') ?? false; 55 | } 56 | } 57 | ) 58 | // Register language features... 59 | ); 60 | // Get settings 61 | const config = vscode.workspace.getConfiguration('btex'); 62 | PanelManager.isInvertAll = config.get('invertAll') ?? false; 63 | 64 | server.startServer(); 65 | } 66 | 67 | export function deactivate() {} 68 | -------------------------------------------------------------------------------- /src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | 3 | import { runTests } from '@vscode/test-electron'; 4 | 5 | async function main() { 6 | try { 7 | // The folder containing the Extension Manifest package.json 8 | // Passed to `--extensionDevelopmentPath` 9 | const extensionDevelopmentPath = path.resolve(__dirname, '../../'); 10 | 11 | // The path to test runner 12 | // Passed to --extensionTestsPath 13 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 14 | 15 | // Download VS Code, unzip it and run the integration test 16 | await runTests({ extensionDevelopmentPath, extensionTestsPath }); 17 | } catch (err) { 18 | console.error('Failed to run tests'); 19 | process.exit(1); 20 | } 21 | } 22 | 23 | main(); 24 | -------------------------------------------------------------------------------- /src/test/suite/extension.test.ts: -------------------------------------------------------------------------------- 1 | import * as assert from 'assert'; 2 | 3 | // You can import and use all API from the 'vscode' module 4 | // as well as import your extension to test it 5 | import * as vscode from 'vscode'; 6 | // import * as myExtension from '../../extension'; 7 | 8 | suite('Extension Test Suite', () => { 9 | vscode.window.showInformationMessage('Start all tests.'); 10 | 11 | test('Sample test', () => { 12 | assert.strictEqual(-1, [1, 2, 3].indexOf(5)); 13 | assert.strictEqual(-1, [1, 2, 3].indexOf(0)); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /src/test/suite/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import * as Mocha from 'mocha'; 3 | import * as glob from 'glob'; 4 | 5 | export function run(): Promise { 6 | // Create the mocha test 7 | const mocha = new Mocha({ 8 | ui: 'tdd', 9 | color: true 10 | }); 11 | 12 | const testsRoot = path.resolve(__dirname, '..'); 13 | 14 | return new Promise((c, e) => { 15 | glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { 16 | if (err) { 17 | return e(err); 18 | } 19 | 20 | // Add files to the test suite 21 | files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); 22 | 23 | try { 24 | // Run the mocha test 25 | mocha.run(failures => { 26 | if (failures > 0) { 27 | e(new Error(`${failures} tests failed.`)); 28 | } else { 29 | c(); 30 | } 31 | }); 32 | } catch (err) { 33 | console.error(err); 34 | e(err); 35 | } 36 | }); 37 | }); 38 | } 39 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ES2020", 5 | "outDir": "out", 6 | "lib": [ 7 | "ES2020", "DOM" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "src", 11 | "strict": true /* enable all strict type-checking options */ 12 | /* Additional Checks */ 13 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 14 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 15 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 16 | } 17 | } 18 | --------------------------------------------------------------------------------