Kommentare in Markdown

1402

Wie lautet die Syntax zum Speichern eines Kommentars in einer Markdown-Datei, z. B. eines CVS $ Id $ -Kommentars oben in der Datei? Ich habe nichts auf dem Markdown-Projekt gefunden .

Betamos
quelle
10
Wenn Sie zwischen den Zeilen lesen, möchten Sie anscheinend Metadaten an Ihren Markdown anhängen. Aus diesem Grund würde ich vorschlagen, einen Präprozessor zu verwenden, mit dem Sie einen Header hinzufügen können. Ein Beispiel finden Sie in Jekylls Front Matter . Ein weiteres Beispiel ist, wie Basho Middleman für seine Dokumentation verwendet . (Hinweis: Dies ist keine direkte Antwort auf die Frage, weshalb ich es als Kommentar
David J.
2
Siehe auch, wie MultiMarkdown Metadaten unterstützt .
David J.
Hier ist ein Benchmark verschiedener Kommentartypen mit verschiedenen Parsern auf Babelmark .
Ulysse BN

Antworten:

1456

Ich glaube, dass alle zuvor vorgeschlagenen Lösungen (mit Ausnahme derjenigen, die bestimmte Implementierungen erfordern) dazu führen, dass die Kommentare in den Ausgabe-HTML-Code aufgenommen werden, auch wenn sie nicht angezeigt werden.

Wenn Sie einen Kommentar wünschen, der ausschließlich für Sie selbst bestimmt ist (Leser des konvertierten Dokuments sollten ihn selbst mit "Quelltext anzeigen" nicht sehen können), können Sie (ab) die Linkbezeichnungen (zur Verwendung mit Links im Referenzstil) verwenden verfügbar in der Kern-Markdown-Spezifikation:

http://daringfireball.net/projects/markdown/syntax#link

Das ist:

[comment]: <> (This is a comment, it will not be included)
[comment]: <> (in  the output file unless you use it in)
[comment]: <> (a reference style link.)

Oder Sie könnten noch weiter gehen:

[//]: <> (This is also a comment.)

Um die Plattformkompatibilität zu verbessern (und einen Tastendruck zu speichern), ist es auch möglich, #(was ein legitimes Hyperlink-Ziel ist) anstelle von <>:

[//]: # (This may be the most platform independent comment)

Für maximale Portabilität ist es wichtig, vor und nach dieser Art von Kommentaren eine Leerzeile einzufügen, da einige Markdown-Parser nicht richtig funktionieren, wenn Definitionen mit normalem Text verglichen werden. Die jüngsten Untersuchungen mit Babelmark zeigen, dass Leerzeilen davor und danach wichtig sind. Einige Parser geben den Kommentar aus, wenn zuvor keine Leerzeile vorhanden ist, und einige Parser schließen die folgende Zeile aus, wenn danach keine Leerzeile vorhanden ist.

Im Allgemeinen sollte dieser Ansatz mit den meisten Markdown-Parsern funktionieren, da er Teil der Kernspezifikation ist. (Auch wenn das Verhalten, wenn mehrere Links definiert sind oder wenn ein Link definiert, aber nie verwendet wird, nicht genau angegeben ist).

Magnus
quelle
145
[//]: # "Comment"und [//]: # (Comment)scheinen an einer größeren Vielfalt von Implementierungen zu arbeiten, da dies #eine gültige relative URI ist. GitHub lehnt beispielsweise ab <>und die gesamte Zeile wird sichtbar. Es ist auch erwähnenswert, dass Link-Labels häufig durch eine Leerzeile von anderen Inhalten getrennt werden müssen.
Zenexer
6
Um möglichst plattformunabhängig zu sein, muss vor dem Kommentar eine Leerzeile stehen. Siehe die Tests: stackoverflow.com/a/32190021/2790048
Nick Volynkin
6
Kann dies für mehrzeilige Kommentare verwendet werden?
Crypdick
4
@RovingRichard Ja, zumindest in Pandoc funktioniert dies für mehrzeilige Kommentare, wenn der kommentierte Block keine Leerzeilen enthält (einzelne Zeilenumbrüche sind in Ordnung). Ich verwende den Magnus-Ansatz für Blockkommentare und den HTML-Ansatz von chl für Inline-Kommentare (obwohl normalerweise nur 2 Striche). Auf diese Weise kann ich Kommentare aus Absätzen blockieren, die bereits Inline-HTML-Kommentare enthalten.
Joelostblom
4
Nur zu Ihrer Information, aber wenn Sie mit Pandoc ein Inhaltsverzeichnis erstellen, wird eine Warnung vor doppelten Linkreferenzen generiert. (Dies sind nur Warnungen, das Inhaltsverzeichnis wird noch erstellt.)
Karl Giesing
995

Ich verwende Standard-HTML-Tags wie

<!---
your comment goes here
and here
-->

Beachten Sie den dreifachen Strich. Der Vorteil ist, dass es beim Generieren von TeX- oder HTML-Ausgaben mit Pandoc funktioniert . Weitere Informationen finden Sie in der Pandoc-Diskussionsgruppe .

chl
quelle
73
Wenn ich das richtig verstehe, ignoriert der dreifache Strich Pandoc den Kommentar, wenn er die Markdown-Datei analysiert. Wenn Sie jedoch eine andere Markdown-Engine verwenden, wird der Kommentar im generierten HTML-Code angezeigt (und ist daher mit "Quelltext anzeigen" sichtbar). Sie müssen also vorsichtig sein, was Sie in diesen Kommentar
einfügen
5
Können Sie erklären, wie Pandoc die dreifachen Striche anders behandelt als die doppelten? Als ich mit ihnen experimentierte, schienen sie auf die gleiche Weise behandelt zu werden. Auch die Führung des Pandoc Benutzers nur sagt : „Die rohe HTML wird in HTML, S5 unverändert weitergeleitet, Slidy, Slideous, DZSlides, EPUB, Markdown und Textilausgabe und in anderen Formaten unterdrückt.“ Die dreifachen Striche scheinen kein höheres Privileg zu haben als die doppelten.
dkim
1
@dkim Kommentare mit dreifachem Strich werden ignoriert und aus der HTML-Ausgabe verworfen. Dies ist nicht der Fall bei doppelt gestrichelten Kommentaren, die in die HTML-Datei eingefügt werden. Dies ist bei der neuesten Version von Pandoc (1.10) immer noch der Fall.
Chl
32
Wenn der dreifache Bindestrich von Bedeutung ist, handelt es sich nicht um "Standard-HTML" -Kommentare.
Tripleee
17
Hinweis für Googler: Dies funktioniert in GitHub Markdown leider nicht und ich habe letztendlich Magnus 'Lösung verwendet.
Daniel Buckmaster
198

Diese kleine Forschung beweist und verfeinert die Antwort von Magnus

Die plattformunabhängigste Syntax ist

(empty line)
[comment]: # (This actually is the most platform independent comment)

Beide Bedingungen sind wichtig:

  1. Verwenden #(und nicht <>)
  2. Mit einer leeren Zeile vor dem Kommentar . Eine leere Zeile nach dem Kommentar hat keinen Einfluss auf das Ergebnis.

Die strenge Markdown-Spezifikation CommonMark funktioniert nur wie vorgesehen mit dieser Syntax (und nicht mit <>und / oder einer Leerzeile).

Um dies zu beweisen, verwenden wir das Babelmark2 von John MacFarlane. Dieses Tool überprüft das Rendern eines bestimmten Quellcodes in 28 Markdown-Implementierungen.

( +- hat den Test bestanden, -- hat nicht bestanden, ?- hinterlässt Müll, der in gerendertem HTML nicht angezeigt wird).

Dies beweist die obigen Aussagen.

Diese Implementierungen schlagen alle 7 Tests fehl. Es gibt keine Möglichkeit, ausgeschlossene Kommentare beim Rendern mit ihnen zu verwenden.

  • cebe / markdown 1.1.0
  • cebe / markdown MarkdownExtra 1.1.0
  • cebe / markdown GFM 1.1.0
  • s9e \ TextFormatter (Fatdown / PHP)
Nick Volynkin
quelle
3
Exzellentes, gründliches Testwerkzeug! Es sieht so aus, als ob Sie Recht haben, # das für alle außer GFM und <> für GFM funktioniert, aber nicht für ein paar andere. Schade, dass GFM sowohl ein Eckfall als auch ein sehr beliebter Geschmack ist.
Kochfelder
1
Es sieht so aus, als ob s9e \ TextFormatter ab dem # 21. Januar 2016 funktioniert. Cebe geht immer noch nicht damit um.
Troy Daniels
1
Seltsamerweise (...)bricht der Kommentar, wenn er von selbst enthält , ihn. Zumindest unter Visual Studio Code 1.19.
Royi
1
und damit für die vim-Benutzer, die alle Dateien auf einmal kommentieren möchten:%s/^\(.*\)$/[comment]: # (\1)/g
Simon C.
Was sagt es über Markdown aus, dass Bablemark2 existiert?
TC Proctor
54

Wenn Sie Jekyll oder Octopress verwenden, funktioniert das Folgende ebenfalls.

{% comment %} 
    These commments will not include inside the source.
{% endcomment %}

Die Liquid-Tags {% comment %}werden zuerst analysiert und entfernt, bevor der MarkDown-Prozessor überhaupt darauf zugreift. Besucher werden nicht sehen, wenn sie versuchen, die Quelle in ihrem Browser anzuzeigen.

Uiroshan
quelle
2
Jinja2 = {#mehrzeilige Kommentare hier#}
John Mee
29

Eine Alternative besteht darin, Kommentare in stilisierte HTML-Tags einzufügen. Auf diese Weise können Sie die Sichtbarkeit nach Bedarf umschalten. Definieren Sie beispielsweise eine Kommentarklasse in Ihrem CSS-Stylesheet.

.comment { display: none; }

Dann das folgende erweiterte MARKDOWN

We do <span class="comment">NOT</span> support comments

erscheint in einem BROWSER wie folgt

We do support comments

Stu
quelle
5
Beim Kopieren / Einfügen wird wahrscheinlich sowohl der "kommentierte" Text als auch der reguläre Text kopiert. Seien Sie also vorsichtig, wenn Sie diesen verwenden. Es kann leicht zu unerwarteten Ergebnissen für jemanden führen, der einen Textblock kopiert.
Eilon
4
@Eilon auch die Zugänglichkeit dafür wäre schrecklich
Ethan
Eingabehilfen unterstützende Engines überspringen die Anzeige ordnungsgemäß: kein Text.
Aredridel
28

Dies funktioniert auf GitHub:

[](Comment text goes here)

Das resultierende HTML sieht aus wie folgt:

<a href="Comment%20text%20goes%20here"></a>

Welches ist im Grunde ein leerer Link. Natürlich können Sie das in der Quelle des gerenderten Textes lesen, aber Sie können das trotzdem auf GitHub tun.

jomo
quelle
6
Es ist definitiv so, aber es ist tatsächlich die einzige Antwort, die bisher immer auf GitHub funktioniert, z. B. in Listen.
jomo
Ich kam zu der gleichen Lösung. Es ist das einzige, bei dem ich für Inline-Kommentare arbeiten kann, z some text [](hidden text) blah blah.
c24w
3
Dies funktioniert nicht mehr auf Github ab dem 08.03.2019, es wird so wie es ist gerendert[](Comment text goes here)
dogmatisch69
19

Vim Instant-Markdown- Benutzer müssen verwenden

<!---
First comment line...
//
_NO_BLANK_LINES_ARE_ALLOWED_
//
_and_try_to_avoid_double_minuses_like_this_: --
//
last comment line.
-->
Alex
quelle
18

Siehe auch Critic Markup, das von einer zunehmenden Anzahl von Markdown-Tools unterstützt wird.

http://criticmarkup.com/

Comment {>> <<}

Lorem ipsum dolor sit amet.{>>This is a comment<<}

Highlight+Comment {== ==}{>> <<}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. {==Vestibulum at orci magna. Phasellus augue justo, sodales eu pulvinar ac, vulputate eget nulla.==}{>>confusing<<} Mauris massa sem, tempor sed cursus et, semper tincidunt lacus.
Kerim
quelle
5
Ich denke, eines der Probleme mit solchen "Pseudo" -Standards ist, dass sie nicht portabel sind. Auf einigen Websites funktionieren diese perfekt, auf anderen nicht.
Willem Van Onsem
14

Wie wäre es, wenn Sie die Kommentare in einen R-Block ohne Auswertung und ohne Echo einfügen? dh

```{r echo=FALSE, eval=FALSE}
All the comments!
```

Scheint gut für mich zu funktionieren.

David Kaufman
quelle
2
Sie können auch Dinge wie cat("# Some Header")in den "auskommentierten" Codeblöcken tun und verwenden results = "asis", und Sie können Ihrem Code ganze auskommentierte Abschnitte hinzufügen, die durch Umschalten ein- eval = FALSEund ausgeschaltet werden können , da die R-Auswertung vor dem erfolgt Pandoc-Zusammenstellung. Danke für die Idee!
MichaelChirico
11

Offenlegung: Ich habe das Plugin geschrieben.

Da in der Frage keine bestimmte Markdown-Implementierung angegeben ist, möchte ich das Kommentar-Plugin für Python-Markdown erwähnen , das denselben oben erwähnten Pandoc-Kommentierungsstil implementiert.

Ryne Everett
quelle
11
<!--- ... --> 

Funktioniert nicht in Pandoc Markdown (Pandoc 1.12.2.1). Kommentare erschienen immer noch in HTML. Folgendes hat funktioniert:

Blank line
[^Comment]:  Text that will not appear in html source
Blank line

Verwenden Sie dann die + Fußnotenerweiterung. Es ist im Wesentlichen eine Fußnote, auf die nie verwiesen wird.

Brad Porter
quelle
Mir gefällt das am besten, weil es überhaupt keine Ausgabe erzeugt. Für Bitbucket ist dieses Präfix ausreichend : [#]: .
2.
7

Das Folgende funktioniert sehr gut

<empty line>
[whatever comment text]::

Diese Methode nutzt die Syntax, um Links über eine Referenz zu erstellen,
da die mit erstellte [1]: http://example.orgLinkreferenz nicht gerendert wird. Ebenso wird auch keine der folgenden Methoden gerendert

<empty line>
[whatever]::
[whatever]:whatever
[whatever]: :
[whatever]: whatever
anapsix
quelle
Diese (getestete erste Variante) funktioniert sowohl für pandocals auch für aktuelle Online-Instanzen von Gitlab und GitHub .
Doak
5

Für Pandoc ist es eine gute Möglichkeit, Kommentare zu blockieren, einen Yaml-Metablock zu verwenden, wie vom Pandoc-Autor vorgeschlagen . Ich habe bemerkt , dass dies die richtige Syntax - Hervorhebung der Kommentare gibt im Vergleich zu vielen anderen Lösungen vorgeschlagen, zumindest in meiner Umgebung ( vim, vim-pandoc, und vim-pandoc-syntax).

Ich verwende Yaml-Blockkommentare in Kombination mit HTML-Inline-Kommentaren, da HTML-Kommentare nicht verschachtelt werden können . Leider gibt es keine Möglichkeit, Kommentare innerhalb des yaml-Metablocks zu blockieren , sodass jede Zeile einzeln kommentiert werden muss. Glücklicherweise sollte ein Softwrapped-Absatz nur eine Zeile enthalten.

In meinem habe ~/.vimrcich benutzerdefinierte Verknüpfungen für Blockkommentare eingerichtet:

nmap <Leader>b }o<Esc>O...<Esc>{ji#<Esc>O---<Esc>2<down>
nmap <Leader>v {jddx}kdd

Ich benutze ,als <Leader>-key, also ,bund ,vkommentiere bzw. kommentiere einen Absatz. Wenn ich mehrere Absätze kommentieren muss, ordne ich j,b(normalerweise Q) einem Makro zu und führe es aus <number-of-paragraphs><name-of-macro>(z 3Q. B. ( ). Dasselbe gilt für das Kommentieren von Kommentaren .

joelostblom
quelle
5

kramdown - die Ruby-basierte Markdown-Engine, die die Standardeinstellung für Jekyll und damit für GitHub Pages ist - verfügt über eine integrierte Kommentarunterstützung durch die Erweiterungssyntax :

{::comment}
This text is completely ignored by kramdown - a comment in the text.
{:/comment}

Do you see {::comment}this text{:/comment}?
{::comment}some other comment{:/}

Dies hat den Vorteil, dass Inline-Kommentare zulässig sind, hat jedoch den Nachteil, dass es nicht auf andere Markdown-Engines portierbar ist.

vossad01
quelle
4

Du kannst es versuchen

[](
Your comments go here however you cannot leave
// a blank line so fill blank lines with
//
Something
)
Magaga
quelle
4

Sie können dies tun (YAML-Block):

~~~
# This is a
# multiline
# comment
...

Ich habe es nur mit Latexausgabe versucht, bitte für andere bestätigen.

Flo
quelle
Es funktioniert auch mit HTML-Ausgabe.
Petzi
Ich bin nicht sicher, ob Daniels Bestätigung der HTML-Ausgabe korrekt ist. Ich habe das mit einer HTML-Ausgabedatei gemacht und "pandoc --bibliography paper.bib -o paper.html paper.md" ausgeführt, und der HTML-Code zeigte die Kommentarzeilen.
Markgalassi