Manual

Copy Markdown

Copy a full ChatGPT answer or a selected Reader range as Markdown, with headings, lists, code blocks, tables, and formulas preserved where possible.

What this solves

ChatGPT’s built-in copy action is fine for a quick paste. It gets messy when the answer has formulas, tables, code blocks, or citation marks.

AI-MarkDone aims for editable Markdown, not just the text you can see on the screen.

When to use it

  • You want a full answer in Obsidian, Typora, VS Code, or Git.
  • You only need a few paragraphs from a long answer.
  • The answer includes code, lists, tables, or formulas.
  • You want less cleanup after pasting.

Where to copy

  • Full answer: click Copy Markdown in the message toolbar.
  • Partial copy: open Reader first, then select the range you need.

Steps

  1. For a full answer, click Copy Markdown in the message toolbar.
  2. For a partial copy, open Reader first.
  3. Select the paragraph, list, table, code block, or formula range you need.
  4. Use the Reader copy action.
  5. Paste into your editor and check the result.

How one answer becomes Markdown

Full-answer copy follows a short path:

  1. Find the current ChatGPT answer.
  2. Refresh the current conversation snapshot and read the assistant content for that turn.
  3. Normalize the content into the Markdown used by Reader.
  4. Remove ChatGPT citation marks, internal annotations, and extra whitespace.
  5. Normalize formula delimiters, such as turning \(...\) into $...$.
  6. Write the Markdown to the clipboard.

Partial copy inside Reader works differently. Reader checks whether your selection touches Markdown units such as inline formulas, code blocks, tables, images, headings, or list items. If a full unit is selected, AI-MarkDone copies the original Markdown for that unit. If you only select a small text slice, it copies the visible text slice.

That is why partial copy works better inside Reader. Reader has a cleaner view of Markdown units than the original ChatGPT page.

What gets cleaned

Think of this step as moving from page structure back to Markdown source. The examples below show what can be mixed into the page on the left, and what should end up on the clipboard on the right.

Cleanup logicBeforeAfterWhy
Remove page chromeAnswer text is mixed with Copy, read-aloud, edit, or hidden helper text →Only the answer body remainsToolbars, buttons, and screen-reader helper text are not part of the note.
Keep heading structureA visual level-2 heading named “Model choice” →## Model choiceThe heading is copied as Markdown, not just large text.
Keep list nestingA nested visual list: first level, second level →- First level
- Second level
Nested lists stay as lists after paste.
Clean code block chromeA code block has a language bar, a copy button, and shared indentation →```python
print(“hi”)
```
The copied text keeps the code and language label, not the UI around it.
Protect inline codeInline code contains a backtick character →A longer backtick fence is used around that codeMarkdown will not close the inline code too early.
Restore rendered formulasThe page shows a rendered formula, not the LaTeX source →$E=mc^2$ or $$...$$AI-MarkDone looks for the source in KaTeX, MathML, data-math, and related fields.
Normalize raw formula delimiters\(x+y\) or \[x+y\]$x+y$ or $$
x+y
$$
Formula syntax from different sources is normalized to common Markdown math.
Repair unrendered math$x_i$ is split by the page as italic text →$x_i$Some pages treat underscores like emphasis; the copy path tries to repair that.
Rebuild tablesAn HTML table has headers, alignment, and cell line breaks →| Name | Value |
| — | —: |
Tables become GFM Markdown tables with basic alignment kept.
Escape pipes inside cellsA cell contains A | BA | BThe pipe should stay inside the cell instead of creating a new column.
Restore formulas in tablesA table cell only shows rendered x₁ + y| $x_1 + y$ |Formulas inside tables remain editable after paste.
Keep links and imagesA page link named “paper” and an image →[paper](https://...), ![alt](https://...)Links and images are kept as standard Markdown.
Tighten whitespaceMany blank lines and trailing spaces →Only useful paragraph spacing remainsThe pasted note needs less manual cleanup.
Reader partial copyA selection touches an inline formula, code block, table, or image →The full Markdown unit is copiedPartial copy is less likely to break formulas, code, or tables.

Supported Markdown

TypeStatusNotes
HeadingsSupported# through ######
ParagraphsSupportedAnswer text is kept as paragraphs
Bold and italicSupported**bold**, *italic*
ListsSupportedOrdered, unordered, and nested lists
Inline codeSupportedBackticks are preserved
Code blocksSupportedFenced code blocks and language labels
BlockquotesSupported>
Thematic breaksSupported---
TablesSupportedGFM tables
FormulasSupportedInline and block formulas
ImagesSupportedMarkdown image syntax
LinksSupportedStandard [text](url) Markdown links are preserved

Common questions

Why should partial copy happen in Reader?

Reader has a cleaner view of Markdown units. The original ChatGPT page is more complex, and selections can be interrupted by buttons, citations, or hidden nodes.

Is the result always perfect?

No. AI-MarkDone tries to preserve complete Markdown units, but the final result still depends on the current ChatGPT page and the target editor.