Коментарі в Markdown


1400

Що таке синтаксис для зберігання коментаря у файлі розмітки, наприклад, коментар CVS $ Id $ у верхній частині файлу? Я нічого не знайшов у проекті розмітки .


10
Читаючи між рядками, вам здається, що ви хочете приєднати метадані до вашої Markdown. З цієї причини я б запропонував використовувати препроцесор, який дозволяє додавати заголовок. Для прикладу див . Передню справу Джекілла . Для іншого прикладу дивіться, як Башо використовує Middleman для їх документації . (Примітка. Це не пряма відповідь на питання, через що я ділюсь цим як коментар.)
David J.


Ось орієнтир різних типів коментарів із різними аналізаторами на Babelmark .
Уліссе БН

Відповіді:


1452

Я вважаю, що всі запропоновані раніше рішення (крім тих, що потребують конкретних реалізацій) призводять до того, що коментарі включаються до вихідного HTML, навіть якщо вони не відображаються.

Якщо ви хочете, щоб коментар був суто для вас самих (читачі перетвореного документа не зможуть його бачити, навіть із "джерелом перегляду"), ви можете (ab) використовувати мітки посилань (для використання із посиланнями стильового стилю), які є доступний в основній специфікації Markdown:

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

Це є:

[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.)

Або ви могли піти далі:

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

Для покращення сумісності платформи (та збереження одного натискання клавіш) також можна використовувати #(що є законною ціллю гіперпосилання) замість <>:

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

Для максимальної переносимості важливо вставити порожній рядок до та після коментарів, оскільки деякі парсерви Markdown не працюють належним чином, коли визначення визначаються з звичайним текстом. Найсвіжіші дослідження Babelmark показують, що порожні рядки до і після є обома важливими. Деякі парсери виведуть коментар, якщо раніше немає порожнього рядка, а деякі парсери виключають наступний рядок, якщо після цього немає порожнього рядка.

Взагалі цей підхід повинен працювати з більшістю парсерів Markdown, оскільки він є частиною основної специфікації. (навіть якщо поведінка, коли визначено кілька посилань або коли посилання визначено, але ніколи не використовується, не є чітко визначеною).


145
[//]: # "Comment"і, [//]: # (Comment)здається, працює над більш широким спектром реалізацій, оскільки #це дійсний відносний URI. Наприклад, GitHub відхиляє <>, і весь рядок стає видимим. Варто також зазначити, що мітки посилань часто потрібно відокремлювати від іншого вмісту порожнім рядком.
Зенексер

6
Щоб бути незалежною від платформи, перед коментарем також потрібен порожній рядок. Дивіться тести: stackoverflow.com/a/32190021/2790048
Нік Волинкін

6
Чи можна це використовувати для багаторядкових коментарів?
crypdick

4
@RovingRichard Так, принаймні в Pandoc це працює для багаторядкових коментарів, якщо в коментованому блоці немає порожніх рядків (перерви в одному рядку - це нормально). Я використовую підхід Magnus для блокування коментарів та HTML-підхід chl для вбудованих коментарів (хоча зазвичай це лише 2 тире). Таким чином я можу заблокувати коментування абзаців, які вже містять вбудовані коментарі HTML.
joelostblom

4
Просто FYI, але якщо ви створюєте TOC за допомогою Pandoc, це створить попередження про повторювані посилання на посилання. (Це лише попередження, TOC все ще буде створений.)
Карл Гізінг

995

Я використовую стандартні теги HTML, наприклад

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

Зверніть увагу на потрійний тире. Перевага полягає в тому, що він працює з pandoc при генерації виводу TeX або HTML. Додаткову інформацію можна отримати в групі, присвяченій обговоренню .


73
Якщо я правильно розумію, потрійний тире змушує pandoc ігнорувати коментар, коли він аналізує файл розмітки. Але якщо ви використовуєте інший механізм розмітки, коментар з'явиться в створеному HTML (і таким чином буде видно з "переглядом джерела"). Отже, ви повинні бути обережними, що ви ставите в цьому коментарі;)
cberzan

5
Чи можете ви пояснити, як Пандок ставиться до потрійних дефісів інакше, ніж подвійний? Коли я експериментував з ними, вони, схоже, поводилися так само. Крім того, керівництво користувача Pandoc просто говорить: " Неочищений HTML передається незмінним у HTML, S5, Slidy, Slideous, DZSlides, EPUB, Markdown та Textile та видаляється в інших форматах". Здається, потрійні тире не мають вищої привілеї, ніж подвійні.
dkim

1
@dkim Коментарі з потрійним тире ігноруються та відкидаються з виводу HTML. Це не так з подвійними штрихами коментарів, які вставляються у файл HTML. Це все ще стосується останньої версії Pandoc (1.10).
chl

32
Якщо потрійний тире є важливим, це не "стандартні HTML" коментарі.
трійчатка

17
Примітка для Googlers: це, на жаль, не працює в GitHub Markdown, і я в кінцевому підсумку використовував рішення Magnus.
Даніель Бакмастер

198

Це невелике дослідження підтверджує та уточнює відповідь Магнуса

Найбільш незалежний від платформи синтаксис

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

Обидві умови важливі:

  1. Використання #(а не <>)
  2. З порожнім рядком перед коментарем . Порожній рядок після коментаря не впливає на результат.

Сувора специфікація Markdown CommonMark працює лише за призначенням із цим синтаксисом (а не із <>та / або порожнім рядком)

Для доведення цього ми використаємо Babelmark2, написаний Джоном Макфарланом. Цей інструмент перевіряє візуалізацію конкретного вихідного коду в 28 реалізаціях Markdown.

( +- пройшов тест, -- не пройшов, ?- залишає сміття, яке не відображається у виведеному HTML).

Це доводить твердження вище.

У цих реалізаціях проходять усі 7 тестів. Немає шансів використовувати коментарі, що виключаються на рендерінг, з ними.

  • cebe / розмітка 1.1.0
  • cebe / markdown MarkdownExtra 1.1.0
  • cebe / розмітка GFM 1.1.0
  • s9e \ TextFormatter (Fatdown / PHP)

3
Відмінний, ретельний інструмент тестування! Схоже, ти маєш рацію, що # працює для всіх, крім GFM, і <> працює для GFM, але не для пари інших. Занадто поганий GFM - це як кутовий корпус, так і дуже популярний смак.
варильні панелі

1
Схоже, s9e \ TextFormatter працює з # 21 січня 2016 року. Cebe досі не справляється з цим.
Troy Daniels

1
Дивно, якщо коментар містить (...)сам себе, він порушує його. Принаймні, на Visual Studio Code 1.19.
Рой

1
і таким чином для користувачів vim, які хочуть прокоментувати весь файл одразу:%s/^\(.*\)$/[comment]: # (\1)/g
Simon C.

Що говорить про розмітку, що Bablemark2 існує?
TC Proctor

54

Якщо ви користуєтесь Jekyll або octopress, наступне також буде працювати.

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

Рідкі теги {% comment %}розбираються спочатку та видаляються ще до того, як процесор MarkDown навіть потрапить на нього. Відвідувачі не побачать, коли вони намагаються переглянути джерело зі свого браузера.


2
Jinja2 = {#багаторядкові коментарі тут#}
Джон Мі

29

Альтернативою є розміщення коментарів у стилізованих тегах HTML. Таким чином, ви можете перемикати їх видимість у міру необхідності. Наприклад, визначте клас коментаря у вашій таблиці стилів CSS.

.comment { display: none; }

Потім, наступний розширений MARKDOWN

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

відображається наступним чином у BROWSER

We do support comments


5
Скопіювати / вставити, швидше за все, скопіюйте текст "коментований", а також звичайний текст, тому будьте обережні при використанні цього. Це може легко створити несподівані результати для того, щоб хтось копіював блок тексту.
Ейлон

4
@Eilon також доступність для цього була б жахлива
Етан

Двигуни, що підтримують доступність, правильно пропускають дисплей: жодного тексту.
aredridel

28

Це працює на GitHub:

[](Comment text goes here)

Отриманий HTML виглядає так:

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

Що в основному порожнє посилання. Очевидно, що ви можете прочитати це у джерелі викладеного тексту, але це все одно можна зробити на GitHub.


6
Це, безумовно, є, але насправді це єдина відповідь поки що завжди працює на GitHub, наприклад, у списках.
jomo

Я прийшов до того ж рішення. Це єдиний, з ким я можу працювати над тим, як вбудовувати коментарі, наприклад some text [](hidden text) blah blah.
c24w

3
Це більше не працює на GitHub від 2019-03-08, надає як[](Comment text goes here)
dogmatic69

19

Користувачам Vim Instant-Markdown потрібно користуватися

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

18

Також дивіться критичну розмітку, підтримувану все більшою кількістю інструментів Markdown.

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.

5
Я думаю, що одна з проблем таких "псевдо" -стандартів полягає в тому, що вони не є портативними. На деяких веб-сайтах вони працюватимуть ідеально, на інших - не.
Віллем Ван Онсем

14

Як щодо розміщення коментарів у неевальському, нееховому блоці R? тобто

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

Здається, для мене це добре працює.


2
Крім того, сміливо виконайте такі дії, як cat("# Some Header")у блоках коду "коментований" і використовуйте results = "asis", і ви можете додати до коду цілі розділи коментованих даних, які можна перемикати або вимикати шляхом перемикання eval = FALSE, оскільки оцінка R проводиться до початку компіляція пандока. Дякую за ідею!
MichaelChirico

11

Розкриття: я написав плагін.

Оскільки питання не визначає конкретної реалізації розмітки, я хотів би згадати Плагін Comments for python-markdown , який реалізує той самий стиль коментування pandoc, який згаданий вище.


11
<!--- ... --> 

Не працює в Pandoc Markdown (Pandoc 1.12.2.1). Коментарі все ще з'явилися в html. Робили наступне:

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

Потім скористайтеся розширенням виноски +. Це, по суті, виноска, на яку ніколи не посилаються.


Мені це найбільше подобається, бо він взагалі не генерує жодного результату. Для Bitbucket цей префікс досить: [#]: .
припинення

7

Наступне працює дуже добре

<empty line>
[whatever comment text]::

цей метод використовує перевагу синтаксису для створення посилань за допомогою посилань,
оскільки посилання на посилання, створене за допомогою [1]: http://example.org, не буде надано, також будь-яке з наведених нижче даних також не буде надано

<empty line>
[whatever]::
[whatever]:whatever
[whatever]: :
[whatever]: whatever

Цей (перевірений перший варіант) працює pandocяк для поточних онлайн-примірників Gitlab, так і для GitHub .
doak

5

Для pandoc хороший спосіб блокувати коментар - це використовувати метаблок yaml, як запропонував автор pandoc . Я помітив , що це дає більш правильну підсвічування синтаксису зауважень по порівнянні з багатьма іншими запропонованими рішеннями, по крайней мере , в моєму оточенні ( vim, vim-pandocі vim-pandoc-syntax).

Я використовую коментарі блоку yaml у поєднанні з html-вбудованими коментарями, оскільки html-коментарі не можуть бути вкладеними . На жаль, немає можливості блокувати коментування в метаблоку yaml , тому кожен рядок повинен коментуватися індивідуально. На щастя, у м'якому обзаведеному абзаці має бути лише один рядок.

В моєму випадку ~/.vimrcя створив спеціальні ярлики для блокування коментарів:

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

Я використовую ,як мій <Leader>-Key, так ,bі ,vкоментувати і розкоментувати абзац, відповідно. Якщо мені потрібно коментувати декілька абзаців, я перетворюю j,bна макрос (як правило Q) і запускаю <number-of-paragraphs><name-of-macro>(наприклад ( 3Q). Те саме працює для коментарів).


5

kramdown - двигун розмітки на основі Ruby, який є за замовчуванням для Jekyll і, таким чином, GitHub Pages - має вбудовану підтримку коментарів через синтаксис розширення :

{::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{:/}

Це має перевагу в тому, що ви можете отримувати вбудовані коментарі, але недоліком не є переносність для інших двигунів Markdown.


4

Ви можете спробувати

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

4

Ви можете зробити це (блок YAML):

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

Я намагався тільки з латексним виведенням, будь ласка, підтвердьте інші.


Він також працює з вихідним HTML.
petzi

Я не впевнений, чи правильне підтвердження Даніелем виводу HTML. Я зробив це з вихідним файлом html і запустив "pandoc --бібліографія paper.bib -o paper.html paper.md", і HTML показав рядки коментарів.
markgalassi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.