Feedback appreciated. ---------- I will try to add more definitions after hearing what features are needed. ##Features Markdown capabilities differ from environment to environment so I expect this will be only a base that one can modify so it fits his/her needs best. - StackExchange MD supports only **H1-H3** headers and Sub/sub/Titles are cell styles which I've associated with them. Sub/sub/Sections are associated with **H4-H6** so you work more with those you may change it since the latter group will look here as ordinary text. - An Output cells generated by `whatever // TraditionalForm` are automatically $\LaTeX$ blocks. An Inline `TraditionalForm` is inline $\LaTeX$. - At the moment only this one type of **Output cell** is parsed. - **Unknown cell styles** leave MD comment: `[//]: # (No rules defined for *CellStyleName*)`, which is not displayed ofc. - I tried to convert **`Hyperlinks`** and it seems to work. - Sub and Subsub `ItemsNumbered` only get prefix in form: `1., 2.` etc. I could put there what we see in MMA, like `1.2.1.` but it doesn't seem to be supported in MD. Or rather, it is sometimes but up to `SubitemNumbered` and no deeper. ---------- ##Tests I've put it as a procedure in palette which can convert things quite nicely. This is a **test notebook** I'm using and the result of tests pasted here: CreateDocument@ Uncompress@ "1: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" (*^ double click to select. Don't evaluate this if the last edit was made by someone else than me*) # Result ---------- # Title **bold** ## Subtitle *italic* ### Subsubtitle Enter text here. Enter TraditionalForm input for evaluation in a separate cell below: ---------- Integrate[x, x] + Sqrt[x] // TraditionalForm $$\frac{x^2}{2}+\sqrt{x}$$ + Item asdasd ItemParagraph + Subitem Text cell [//]: # (No rules defined for DisplayFormula) # Title with Hyperlink: [Wolfram Research, Inc.](http://www.wolfram.com) and # a TraditionalForm expression: $\frac{x^2}{2}+\sqrt{x}$ # (*both are in InlineCells*) Text with inline formula: $4$. 1. ItemNumbered ItemParagraph 1. SubitemNumbered SubitemParagraph 1. SubsubitemNumbered SubsubitemParagraph ---------- fun[x_] := 1 [//]: # (No rules defined for Program) ---------- # /Result ## Code for palette CreatePalette[#, CellContext -> Notebook] &@DynamicModule[{}, Button["Export to Markdown", CreateDocument@exportMD@InputNotebook[]], Initialization :> ( itemIndent = " "; codeIndent = " "; itemMark = "+ "; itemPrefix = Function[{cellObj, style}, Module[{ ind, depth, numberedQ, paragraphQ}, ind = ToString@CurrentValue[cellObj, {"CounterValue", style}]; depth = StringCount[style, "sub", IgnoreCase -> True]; numberedQ = StringCount[style, "numbered", IgnoreCase -> True] > 0; paragraphQ = StringCount[style, "paragraph", IgnoreCase -> True] > 0; StringJoin@Flatten@{ ConstantArray[itemIndent, depth + If[paragraphQ, 2, 1]], Which[ numberedQ, {ind, ". "}, paragraphQ, "", True, itemMark] } ]]; prefix[styleName_] := Switch[styleName, "Title", "# ", "Subtitle", "## ", "Subsubtitle", "### ", "Section", "#### ", "Subsection", "##### ", "Subsubsection", "###### ", "Text", "", "items", itemPrefix, "code", codeIndent ]; styleWrapper[opts___] := Module[{italic, bold, wrapper }, italic = MemberQ[{opts}, Verbatim[Rule][FontSlant, "Italic"]]; bold = MemberQ[{opts}, Verbatim[Rule][FontWeight, "Bold"]]; wrapper = Which[ bold, "**", italic, "*", True, "" ]; wrapper <> # <> wrapper & ]; parseCodeData[data_] := StringReplace[ First[FrontEndExecute[FrontEnd`ExportPacket[data, "InputText"]]], "\n" -> "\n" <> codeIndent ]; textStyleQ = (StringCount[#, "title" | "section" | "text", IgnoreCase -> True] > 0) &; itemStyleQ = (StringCount[#, "item", IgnoreCase -> True] > 0) &; codeStyleQ = MemberQ[{"Code", "Input"}, #] &; exportMD[nb_NotebookObject] := StringJoin@Flatten[exportMD /@ Cells[nb]]; exportMD[cellObj_CellObject] := exportMD[NotebookRead[cellObj], cellObj]; exportMD[cell_Cell, cellObj_CellObject] := exportMD[#2, #, cellObj] & @@ cell; exportMD[style_?textStyleQ, data_, cellObj_CellObject] := { prefix[style], addPrefix[style] /@ Flatten@{parseData[data]}, "\n\n" }; addPrefix[style_][expr : Except[_String]] := expr; addPrefix[style_][s_String] := StringReplace[s, "\n" -> "\n" <> prefix[style]]; exportMD[style_?itemStyleQ, data_, cellObj_CellObject] := { prefix["items"][cellObj, style], parseData@data, "\n\n"}; exportMD[style_?codeStyleQ, data_, cellObj_CellObject] := { "\n\n----------\n\n", codeIndent, parseCodeData@data, "\n\n"}; exportMD["Output", BoxData[FormBox[boxes_, TraditionalForm]], cellObj_CellObject] := TemplateApply[ "$$``$$\n\n", {boxesToTeX@boxes} ]; parseData[list_List] := parseData /@ list; parseData[string_String] := string; parseData[data_ (BoxData | TextData)] := List @@ (parseData /@ data); parseData[cell_Cell] := parseData@First@cell; (*inlince cells style skipped*) parseData[StyleBox[expr_, opts___]] := styleWrapper[opts]@parseData[expr]; parseData[ FormBox[boxes : Except[_TagBox], TraditionalForm, ___]] := Module[{teXForm}, teXForm = boxesToTeX@boxes; "$" <> teXForm <> "$" ]; parseData[ box : ButtonBox[_, ___, BaseStyle -> "Hyperlink", ___]] := Module[{label, url}, {label, url} = {#, #2} & @@ ToExpression[box]; TemplateApply[ "[``](``)", {StringJoin@Flatten@{parseData@label}, url}] ]; (*default behaviour for boxes*) parseData[boxes_] := parseData@First@boxes; (*default behaviour for cell styles*) exportMD[s_, ___] := TemplateApply["[//]: # (No rules defined for ``)\n\n", {s}]; boxesToTeX = ToString[ToExpression@#, TeXForm] &; ) ] [1]: https://i.sstatic.net/4Lh8o.png