Kramdown Syntax (jekyll 마크다운 문법)

업데이트: Link

Kramdown Syntax

This is version 2.3.1 of the syntax documentation.

kramdown 구문은 Markdown 구문을 기반으로 하며 Maruku, PHP Markdown ExtraPandoc 과 같은 다른 Markdown 구현에서 볼 수 있는 기능으로 향상되었습니다. 그러나 명확한 규칙이 있는 엄격한 구문을 제공하기 위해 노력하므로 Markdown과 완전히 호환되지 않습니다. 그럼에도 불구하고 대부분의 Markdown 문서는 kramdown으로 구문 분석할 때 제대로 작동합니다. kramdown 구문이 Markdown 구문과 다른 모든 위치가 강조 표시됩니다.

다음은 kramdown이 지원하는 모든 요소에 대한 완전한 구문 정의입니다. 사용 가능한 변환기에 대한 문서와 함께 kramdown 문서가 변환될 때 얻을 수 있는 것이 명확하게 지정되어 있습니다.

Source Text Formatting

kramdown 문서는 ASCII, UTF-8 또는 ISO-8859-1과 같은 모든 인코딩일 수 있으며 출력은 소스와 동일한 인코딩을 갖습니다.

문서는 두 가지 유형의 요소, 즉 block-level 요소와 span-level 요소로 구성됩니다.

  • block-level 요소는 콘텐츠의 주요 구조를 정의합니다(예: 텍스트의 어느 부분이 단락, 목록, 인용구 등이어야 하는지).
  • span-level 요소는 작은 텍스트 부분을 강조된 텍스트 또는 링크와 같이 표시합니다.

따라서 범위 수준 요소는 블록 수준 요소 또는 다른 범위 수준 요소 내에서만 발생할 수 있습니다.

블록 수준 요소 설명에서 줄의 “첫 번째 열” 또는 “첫 번째 문자”에 대한 참조를 종종 찾을 수 있습니다. 일부 블록 수준 요소는 새 들여쓰기 수준(예: blockquotes)을 열기 때문에 이러한 참조는 항상 현재 들여쓰기 수준과 관련하여 취해져야 합니다. kramdown 문서의 시작은 텍스트의 첫 번째 열에서 시작하는 기본 들여쓰기 수준을 엽니다.

Line Wrapping

일부 가벼운 마크업 구문은 줄이 하드 래핑된 환경에서 제대로 작동하지 않습니다. 예를 들어, 이것은 많은 이메일 프로그램의 경우입니다. 따라서 kramdown을 사용하면 단락이나 인용구와 같은 콘텐츠를 줄 바꿈하여 하드 래핑할 수 있습니다. 콘텐츠의 첫 번째 줄에 필요한 들여쓰기 또는 줄 접두사가 연속되는 줄에 필요하지 않기 때문에 이것을 “지연 구문”이라고 합니다.

줄 바꿈을 지원하는 블록 수준 요소는 다음 조건 중 하나가 충족될 때 항상 종료됩니다.

줄 바꿈은 kramdown 문서 전체에서 허용되지만 강제 줄 바꿈을 지원하지 않는 일부 블록 수준 요소가 있습니다.

headers
헤더는 일반적으로 한 줄에 맞기 때문에 대부분의 상황에서는 문제가 되지 않습니다. 헤더 텍스트가 한 줄에 너무 길어지면 대신 HTML 구문을 사용해야 합니다.
fenced code blocks
분리된 코드 블록의 구분 라인은 하드 래핑을 지원하지 않습니다. 구분 줄 사이의 모든 것이 있는 그대로 사용되기 때문에 분리된 코드 블록의 내용도 하드 래핑을 지원하지 않습니다.
definition list terms
각 정의 용어는 별도의 줄에 나타나야 합니다. 따라서 하드 래핑은 추가 정의 용어를 도입합니다. 그러나 정의 자체는 하드 래핑을 지원합니다.
tables
kramdown 테이블의 각 행은 하나의 테이블 행 또는 구분 기호를 설명하므로 테이블을 하드 랩핑할 수 없습니다.

참고 kramdown 문서를 작성하기 위해 지연 구문을 사용하는 것은 권장되지 않습니다. 줄 바꿈 문제로 인해 kramdown 구문이 제공하는 유연성은 가독성을 저해하므로 사용해서는 안 됩니다.

Usage of Tabs

kramdown은 탭 정지가 4의 배수로 설정되어 있다고 가정합니다. 이것은 목록에서 들여쓰기를 위해 탭을 사용할 때 특히 중요합니다. 또한 탭은 텍스트를 들여쓸 때 줄의 시작 부분에만 사용할 수 있으며 공백이 앞에 오면 안 됩니다. 그렇지 않으면 결과가 예기치 않을 수 있습니다.

Automatic and Manual Escaping

출력 형식에 따라 특수 처리가 필요한 문자가 있는 경우가 많습니다. 예를 들어, kramdown 문서를 HTML로 변환할 때 <, >& 문자를 처리해야 합니다. 이러한 특수 문자 작업을 쉽게 하기 위해 출력 형식에 따라 자동으로 올바르게 이스케이프됩니다.

예를 들어, kramdown 문서에서 <, >&만 사용할 수 있으며 해당 HTML 엔티티를 언제 사용할지 생각할 필요가 없습니다. 그러나 문자 중 하나를 사용하는 HTML 엔터티 또는 HTML 태그를 사용하는 경우에도 결과는 정확합니다!

kramdown은 또한 텍스트를 마크업하기 위해 일부 문자를 사용하기 때문에 이러한 특수 문자가 정상적인 의미를 가질 수 있도록 이스케이프 처리하는 방법이 필요합니다. 이것은 백슬래시 이스케이프를 사용하여 수행할 수 있습니다. 예를 들어 다음과 같이 리터럴 백 틱을 사용할 수 있습니다.

This \`is not a code\` span!

다음은 이스케이프할 수 있는 모든 문자(문자 시퀀스)의 목록입니다.

\         backslash
.         period
*         asterisk
_         underscore
+         plus
-         minus
=         equal sign
`         back tick
()[]{}<>  left and right parens/brackets/braces/angle brackets
#         hash
!         bang
<<        left guillemet
>>        right guillemet
:         colon
|         pipe
"         double quote
'         single quote
$         dollar sign

Block Boundaries

일부 블록 수준 요소는 문서에 명시된 대로 소위 블록 경계에서 시작 및/또는 끝나야 합니다. 블록 경계가 작동하는 두 가지 경우가 있습니다.

  • 블록 수준 요소가 블록 경계에서 시작해야 하는 경우 빈 줄, EOB 마커, 블록 IAL 이 앞에 와야 하거나 첫 번째 요소여야 합니다.
  • 블록 수준 요소가 블록 경계에서 끝나야 하는 경우 빈 줄, EOB 마커, 블록 IAL 또는 마지막 요소.

Structural Elements

모든 구조 요소는 블록 수준 요소이며 콘텐츠를 구조화하는 데 사용됩니다. 예를 들어 간단한 단락, 인용문 또는 목록 항목으로 일부 텍스트를 표시할 수 있습니다.

Blank lines

공백 및 탭과 같은 공백 문자만 포함하는 모든 행은 kramdown에서 공백 행으로 간주됩니다. 하나 이상의 연속된 빈 줄은 하나의 빈 빈 줄로 처리됩니다. 빈 줄은 블록 수준 요소를 서로 구분하는 데 사용되며 이 경우 의미상 의미가 없습니다. 그러나 빈 줄이 의미론적 의미를 갖는 경우가 있습니다.

Paragraphs

단락은 가장 많이 사용되는 블록 수준 요소입니다. 하나 이상의 연속된 텍스트 행은 하나의 단락으로 해석됩니다. 단락의 첫 줄은 최대 3칸까지 들여쓸 수 있으며, 다른 줄은 줄 바꿈을 지원하기 때문에 다른 줄은 얼마든지 들여쓸 수 있습니다. 줄 바꿈에 대한 섹션에 설명된 규칙 외에도 정의 목록 줄이 발생하면 단락이 끝납니다.

하나 이상의 빈 줄을 사용하여 두 개의 연속 단락을 서로 분리할 수 있습니다. 소스의 줄 바꿈은 출력의 줄 바꿈을 의미하지 않습니다(게으른 구문 때문에)!. 명시적인 줄 바꿈(예: <br /> 태그)을 원하면 두 개 이상의 공백이나 두 개의 백슬래시로 줄을 끝내야 합니다! 그러나 단락의 마지막 텍스트 줄에서 줄 바꿈은 불가능하며 무시됩니다. 단락 텍스트에서 선행 및 후행 공백이 제거됩니다.

다음은 단락이 어떻게 보이는지 보여주는 예입니다.

This⋅para⋅line⋅starts⋅at⋅the⋅first⋅column.⋅However,
⋅⋅⋅⋅⋅⋅the⋅following⋅lines⋅can⋅be⋅indented⋅any⋅number⋅of⋅spaces/tabs.
⋅⋅⋅The⋅para⋅continues⋅here.

⋅⋅This⋅is⋅another⋅paragraph,⋅not⋅connected⋅to⋅the⋅above⋅one.⋅But⋅⋅
with⋅a⋅hard⋅line⋅break.⋅\\
And⋅another⋅one.

This para line starts at the first column. However, the following lines can be indented any number of spaces/tabs. The para continues here.

This is another paragraph, not connected to the above one. But
with a hard line break.
And another one.

Headers

kramdown은 소위 Setext 스타일 및 atx 스타일 헤더를 지원합니다. 두 양식 모두 단일 문서 내에서 사용할 수 있습니다.

Setext Style

Setext 스타일 헤더는 블록 경계에서 한 줄의 텍스트(헤더 텍스트)와 등호(첫 번째 수준 머리글의 경우) 또는 대시(두 번째 수준 머리글의 경우)만 있는 줄에서 시작해야 합니다. 헤더 텍스트는 최대 3개의 공백으로 들여쓸 수 있지만 헤더 텍스트에서 선행 또는 후행 공백은 제거됩니다. 등호 또는 대시의 양은 중요하지 않으며 하나만 있으면 충분하지만 더 많을수록 더 좋아 보일 수 있습니다. 등호 또는 대시는 첫 번째 열에서 시작해야 합니다. 예를 들어:

First level header
==================

Second level header
------

   Other first level header
=

First level header

Second level header

Other first level header

Setext 헤더는 블록 경계에서 시작하므로 대부분의 상황에서 앞에 빈 줄이 있어야 함을 의미합니다. 그러나 Setext 헤더 다음에는 빈 줄이 필요하지 않습니다.

This is a normal
paragraph.

And A Header
------------
And a paragraph

> This is a blockquote.

And A Header
------------

This is a normal paragraph.

And A Header

And a paragraph

This is a blockquote.

And A Header

그러나 일반적으로 Setext 헤더 뒤에 빈 줄을 사용하는 것이 더 적절해 보이고 문서를 읽기 쉽기 때문에 사용하는 것이 좋습니다.

원래 Markdown 구문에서는 Setext 헤더 앞의 빈 줄을 생략할 수 있습니다. 그러나 이는 모호성을 유발하고 문서를 필요 이상으로 읽기 어렵게 만듭니다. 따라서 kramdown 문서에서는 허용되지 않습니다.

언급할 가치가 있는 극단적인 경우는 다음과 같습니다.

header
---
para

para

이것이 수평 규칙 또는 두 번째 수준 헤더와 단락으로 구분된 두 단락을 나타내는지 질문할 수 있습니다. 예의 문구에서 알 수 있듯이 후자가 그렇습니다. 일반적인 규칙은 Setext 헤더가 수평 규칙보다 먼저 처리된다는 것입니다.

atx Style

atx 스타일 헤더는 블록 경계에서 하나 이상의 해시 문자와 헤더 텍스트를 포함하는 행으로 시작해야 합니다. 해시 문자 앞에 공백이 허용되지 않습니다. 해시 문자의 수는 제목 수준을 지정합니다. 하나의 해시 문자는 첫 번째 수준 제목을 제공하고 두 개는 두 번째 수준 제목을 제공하는 식으로 여섯 번째 수준 제목에 대해 최대 6개의 해시 문자까지 계속됩니다. 헤더를 닫기 위해 행 끝에 원하는 수만큼 해시를 사용할 수 있습니다. 헤더 텍스트에서 선행 또는 후행 공백이 제거됩니다. 예를 들어:

# First level header

### Third level header    ###

## Second level header ######

First level header

Third level header

Second level header

다시 말하지만, 원래 Markdown 구문에서는 atx 스타일 헤더 앞의 빈 줄을 생략할 수 있습니다.

Specifying a Header ID

kramdown은 PHP Markdown ExtraMaruku에서 가져온 헤더 ID를 명시적으로 설정하는 좋은 방법을 지원합니다. 헤더 텍스트 뒤에 여는 중괄호(텍스트와 하나의 공백 이상으로 구분됨), 해시, ID 및 닫는 중괄호가 있으면 해당 ID가 헤더에 설정됩니다. atx 스타일 헤더의 후행 해시 기능을 사용하는 경우 헤더 ID가 후행 해시 뒤에 와야 합니다. 예를 들어:

Hello        {#id}
-----

# Hello      {#id}

# Hello #    {#id}

Hello

Hello

Hello

이 추가 구문은 표준 Markdown의 일부가 아닙니다.

Blockquotes

큰따옴표는 > 표시 뒤에 선택적 공백과 큰따옴표의 내용을 사용하여 시작됩니다. 마커 자체는 최대 3칸까지 들여쓸 수 있습니다. 큰따옴표 표시로 시작하거나 텍스트만 포함하는 모든 다음 줄은 큰따옴표가 줄 바꿈을 지원하기 때문에 큰따옴표에 속합니다.

blockquote의 내용은 블록 수준 요소입니다. 즉, 텍스트를 콘텐츠로 사용하는 경우 단락으로 래핑됩니다. 예를 들어, 다음은 두 개의 단락이 포함된 하나의 인용문을 제공합니다.

> This is a blockquote.
>     on multiple lines
that may be lazy.
>
> This is the second paragraph.

This is a blockquote. on multiple lines that may be lazy.

This is the second paragraph.

blockquote의 내용은 블록 수준 요소이므로 blockquotes를 중첩하고 다른 블록 수준 요소를 사용할 수 있습니다(이것이 blockquotes가 줄 바꿈을 지원해야 하는 이유이기도 합니다).

> This is a paragraph.
>
> > A nested blockquote.
>
> ## Headers work
>
> * lists too
>
> and all other block-level elements

This is a paragraph.

A nested blockquote.

Headers work

  • lists too

and all other block-level elements

> 표시 뒤의 첫 번째 공백 문자는 인용 부호 안에 있는 블록 수준 요소의 들여쓰기를 위한 공백을 계산할 때 계산되지 않습니다! 따라서 코드 블록은 다음과 같이 5개의 공백 또는 1개의 공백과 1개의 탭으로 들여쓰기되어야 합니다.

> A code block:
>
>     ruby -e 'puts :works'

A code block:

ruby -e 'puts :works'

줄 바꿈은 게으름을 허용하지만 가독성을 방해하므로 특히 인용 부호를 사용할 때는 피해야 합니다. 다음은 줄 바꿈과 함께 블록 따옴표를 사용하는 예입니다.

> This is a paragraph inside
a blockquote.
>
> > This is a nested paragraph
that continues here
> and here
> > and here

This is a paragraph inside a blockquote.

This is a nested paragraph that continues here and here and here

Code Blocks

코드 블록 내에서 구문이 구문 분석되지 않기 때문에 코드 블록을 사용하여 마크업, HTML 또는 프로그램 단편과 같은 축어적 텍스트를 나타낼 수 있습니다.

Standard Code Blocks

코드 블록은 공백 4개 또는 탭 1개를 사용한 다음 코드 블록의 텍스트를 사용하여 시작할 수 있습니다. 이 구문을 준수하는지 여부에 관계없이 텍스트가 포함된 다음 줄은 모두 코드 블록에 속합니다. 코드 블록이 줄 바꿈을 지원하기 때문입니다. 줄 바꿈된 코드 줄은 줄 바꿈을 공백 문자로 대체하여 앞의 코드 줄에 자동으로 추가됩니다. 들여쓰기(4개의 공백 또는 하나의 탭)는 코드 블록의 각 줄에서 제거됩니다.

원래 Markdown 구문은 코드 블록에서 줄 바꿈을 허용하지 않습니다.

빈 줄로만 구분되는 연속적인 코드 블록은 하나의 코드 블록으로 병합됩니다.

    Here comes some code

    This text belongs to the same code block.
Here comes some code

This text belongs to the same code block.

하나의 코드 블록을 다른 블록 다음에 바로 사용하려면 EOB 마커를 사용하여 두 블록을 구분해야 합니다.

    Here comes some code
^
    This one is separate.
Here comes some code
This one is separate.

Fenced Code Blocks

이 대체 구문은 원래 Markdown 구문의 일부가 아닙니다. 아이디어와 구문은 PHP Markdown Extra 패키지에서 가져왔습니다.

kramdown은 들여쓰기 블록을 사용하지 않고 줄을 구분하는 코드 블록에 대한 대체 구문도 지원합니다. 시작 줄은 3개 이상의 물결표 문자(~)로 시작해야 하고 닫는 줄에는 시작 줄에 있는 물결표 수가 최소한 있어야 합니다. 그 사이의 모든 것은 다른 구문과 마찬가지로 문자 그대로 사용되지만 텍스트를 들여쓸 필요는 없습니다. 예를 들어:

~~~~~~~~
Here comes some code.
~~~~~~~~
Here comes some code.

이러한 코드 블록에 물결표 줄이 필요한 경우 물결표가 더 많은 코드 블록을 시작하면 됩니다. 예를 들어:

~~~~~~~~~~~~
~~~~~~~
code with tildes
~~~~~~~~
~~~~~~~~~~~~~~~~~~
~~~~~~~
code with tildes
~~~~~~~~

이 유형의 코드 블록은 코드를 들여쓸 필요가 없기 때문에 복사하여 붙여넣은 코드에 특히 유용합니다.

Language of Code Blocks

IAL을 사용하여 코드 블록의 언어를 kramdown에 알릴 수 있습니다.

~~~
def what?
  42
end
~~~
{: .language-ruby}
def what?
  42
end

특별히 명명된 language-ruby 클래스는 이 코드 블록이 Ruby 언어로 작성되었음을 krmdown에 알려줍니다. 이러한 정보는 예를 들어 변환기가 코드 블록에서 구문 강조를 수행하는 데 사용할 수 있습니다.

분리된 코드 블록은 언어를 지정하는 더 쉬운 방법을 제공합니다. 즉, 코드 블록의 언어를 시작 줄 끝에 추가하는 것입니다.

~~~ ruby
def what?
  42
end
~~~
def what?
  42
end

Lists

kramdown은 정렬된 목록과 정렬되지 않은 목록과 정의 목록을 만들기 위한 구문 요소를 제공합니다.

Ordered and Unordered lists

순서가 지정된 목록과 순서가 지정되지 않은 목록은 모두 동일한 규칙을 따릅니다.

목록은 목록 마커(순서 없는 목록의 경우 +, - 또는 * 중 하나 - 혼합 가능 - 순서가 있는 목록의 경우 숫자 다음에 마침표가 옴) 다음에 탭 하나가 오는 것으로 시작됩니다. 또는 하나 이상의 공백, 선택적으로 목록 항목에 적용해야 하는 IAL 목록 항목의 다음에 콘텐츠의 첫 번째 부분이 옵니다. 선행 탭이나 공백은 목록 항목의 다음 내용과 잘 정렬되도록 이 첫 번째 내용 줄에서 제거됩니다(아래 참조). 동일한 마커 유형(순서 없음 또는 정렬됨)을 가진 다음의 모든 목록 항목은 동일한 목록에 넣습니다. 정렬된 목록에 사용되는 숫자는 관련이 없으며 정렬된 목록은 항상 1에서 시작합니다.

다음은 정렬되지 않은 목록과 정렬된 목록을 제공합니다.

* kram
+ down
- now

1. kram
2. down
3. now
  • kram
  • down
  • now
  1. kram
  2. down
  3. now

원래 Markdown 구문을 사용하면 정렬된 목록과 정렬되지 않은 목록의 마커를 혼합할 수 있으며 첫 번째 마커는 목록 유형(순서 또는 비순서)을 지정합니다. 크램다운에서는 허용되지 않습니다. 언급한 바와 같이 위의 예는 kramdown에서 두 개의 목록(순서 없는 목록과 정렬된 목록)을 제공하고 Markdown에서 단 하나의 순서 없는 목록을 제공합니다.

목록의 첫 번째 목록 마커는 최대 3칸까지 들여쓸 수 있습니다. 같은 줄의 목록 항목 표시자 뒤에 나타나는 첫 번째 공백이 아닌 문자의 열 번호는 목록 항목의 다음 줄에 사용해야 하는 들여쓰기를 지정합니다. 이러한 문자가 없는 경우 들여쓰기를 사용해야 하는 것은 공백 4개 또는 탭 1개입니다. 들여쓴 줄 다음에는 줄 바꿈으로 인해 들여쓰기가 있는 텍스트가 포함된 줄이 올 수 있습니다. 그러나 줄 바꿈에 대한 섹션에 설명된 규칙 외에도 목록 항목은 다른 목록 항목 마커가 있는 줄을 만나면 끝납니다. 다음 단락을 참조하세요.

들여쓰기가 콘텐츠에서 제거되고 콘텐츠(콘텐츠는 자연스럽게 항목 마커가 있는 줄의 콘텐츠도 포함함)는 블록 수준 요소를 포함하는 텍스트로 처리됩니다. 목록의 다른 모든 목록 표시자는 최대 3개의 공백 또는 마지막 목록 항목의 들여쓰기에 사용된 공백의 수에서 1을 뺀 값 중 더 작은 수까지 들여쓸 수 있습니다. 예를 들어:

* This is the first line. Since the first non-space characters appears in
  column 3, all other indented lines have to be indented 2 spaces.
However, one could be lazy and not indent a line but this is not
recommended.
*       This is the another item of the list. It uses a different number
   of spaces for indentation which is okay but should generally be avoided.
   * The list item marker is indented 3 spaces which is allowed but should
     also be avoided and starts the third list item. Note that the lazy
     line in the second list item may make you believe that this is a
     sub-list which it isn't! So avoid being lazy!
  • This is the first line. Since the first non-space characters appears in column 3, all other indented lines have to be indented 2 spaces. However, one could be lazy and not indent a line but this is not recommended.
  • This is the another item of the list. It uses a different number of spaces for indentation which is okay but should generally be avoided. * The list item marker is indented 3 spaces which is allowed but should also be avoided and starts the third list item. Note that the lazy line in the second list item may make you believe that this is a sub-list which it isn’t! So avoid being lazy!

따라서 위의 내용이 가능하고 3개의 항목으로 하나의 목록을 생성하지만 동일한 수준 목록 항목에 대해 다른(마커 및 목록 콘텐츠) 들여쓰기와 지연 들여쓰기를 사용하는 것은 권장되지 않습니다! 이러한 목록을 다음과 같은 방식으로 작성하는 것이 훨씬 좋습니다.

* This is the first list item bla blabla blabla blabla blabla blabla
  blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla
  blabla blabla blabla bla
* This is the another item of the list. bla blabla blabla blabla blabla
  blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla
  • This is the first list item bla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla bla
  • This is the another item of the list. bla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla

원래 Markdown 구문을 사용하면 마커를 들여쓸 수도 있지만 목록 항목에서 발생하는 동작이 명확하게 지정되지 않아 사용자를 놀라게 할 수 있습니다.

또한 Markdown은 고정된 수의 공백/탭을 사용하여 목록 항목에 속하는 줄을 들여쓰기합니다!

정렬되지 않은 목록과 정렬된 목록은 들여쓰기와 관련하여 동일한 방식으로 작동합니다.

* list 1 item 1
 * list 1 item 2 (indent 1 space)
  * list 1 item 3 (indent 2 spaces)
   * list 1 item 4  (indent 3 spaces)
    * lazy text belonging to above item 4
  • list 1 item 1
  • list 1 item 2 (indent 1 space)
  • list 1 item 3 (indent 2 spaces)
  • list 1 item 4 (indent 3 spaces) * lazy text belonging to above item 4
1. list 1 item 1
 2. list 1 item 2 (indent 1 space)
  3. list 1 item 3 (indent 2 spaces)
   4. list 1 item 4  (indent 3 spaces)
    5. lazy text belonging to above item 4
  1. list 1 item 1
  2. list 1 item 2 (indent 1 space)
  3. list 1 item 3 (indent 2 spaces)
  4. list 1 item 4 (indent 3 spaces) 5. lazy text belonging to above item 4
* list 1 item 1
  * nested list item 1
  * nested list item 2
* list 1 item 2
  * nested list item 1
  • list 1 item 1
    • nested list item 1
    • nested list item 2
  • list 1 item 2
    • nested list item 1
1. list 1 item 1
   1. nested list item 1
   2. nested list item 2
10. list 1 item 2
    1. nested list item 1
  1. list 1 item 1
    1. nested list item 1
    2. nested list item 2
  2. list 1 item 2
    1. nested list item 1
1. text for this list item
   further text (indent 3 spaces)

10. text for this list item
    further text (indent 4 spaces)
  1. text for this list item further text (indent 3 spaces)

  2. text for this list item further text (indent 4 spaces)

목록 항목의 내용을 들여쓰기 위해 탭을 사용할 때 탭 정지는 kramdown의 경우 4의 배수에서 발생한다는 점을 기억하십시오. 들여쓰기를 계산하기 위해 탭이 공백으로 올바르게 변환됩니다. 예를 들어:

*   Using a tab to indent this line, the tab only counts as three spaces
    and therefore the overall indentation is four spaces.

   1.   The tab after the marker counts here as three spaces. Since the
        indentation of the marker is three spaces and the marker itself
        takes two characters, the overall indentation needed for the
        following lines is eight spaces or two tabs.
  • Using a tab to indent this line, the tab only counts as three spaces and therefore the overall indentation is four spaces.
  1. The tab after the marker counts here as three spaces. Since the indentation of the marker is three spaces and the marker itself takes two characters, the overall indentation needed for the following lines is eight spaces or two tabs.

탭과 공백을 혼합하거나 편집기에서 탭 정지를 4의 배수로 설정하지 않은 경우 예기치 않은 결과를 얻을 수 있다는 것은 분명합니다! 그러므로 이것은 피해야 합니다!

목록 항목의 내용은 텍스트 또는 블록 수준 요소로 구성됩니다. 단순 목록 항목에는 위의 예와 같은 텍스트만 포함됩니다. 그들은 단락 태그로 래핑되지도 않습니다. 첫 번째 목록 텍스트 다음에 하나 이상의 빈 줄이 오는 경우 단락 태그로 줄 바꿈됩니다.

* kram

* down
* now
  • kram

  • down
  • now

위의 예에서 첫 번째 목록 항목 텍스트는 단락 태그로 둘러싸이게 되는데 그 뒤에 빈 줄이 오기 때문에 두 번째 목록 항목에는 텍스트만 포함됩니다. 텍스트만 포함된 마지막 목록 항목에 이 작업을 수행하는 데 분명히 문제가 있습니다. 마지막 목록 항목 뒤에 빈 줄을 남겨두고 EOB 마커를 사용하여 이를 우회할 수 있습니다.

* Not wrapped in a paragraph
* Wrapped in a paragraph due to the following blank line.

* Also wrapped in a paragraph due to the
  following blank line and the EOB marker.

^
  • Not wrapped in a paragraph
  • Wrapped in a paragraph due to the following blank line.

  • Also wrapped in a paragraph due to the following blank line and the EOB marker.

모든 다른 목록 항목이 첫 번째 요소로 적절한 단락을 포함하는 경우 마지막 목록 항목의 텍스트도 단락 태그로 래핑됩니다. 이렇게 하면 다음 사용 사례가 예상대로 작동합니다. 즉, 모든 목록 항목이 단락으로 래핑됩니다.

* First list item

* Second list item

* Last list item
  • First list item

  • Second list item

  • Last list item

원래 Markdown 구문 페이지는 하나 이상의 빈 줄로 구분된 목록 항목이 단락 태그로 래핑되도록 지정합니다. 즉, 목록에 빈 줄로 구분된 블록 수준 요소가 있는 경우 첫 번째 텍스트도 단락으로 줄 바꿈됩니다. 위의 규칙은 기억하기 쉽고 첫 번째 목록 텍스트가 단락에서 줄 바꿈되어야 하는 시점을 정확하게 지정할 수 있도록 합니다. 위의 규칙에 대한 아이디어는 Pandoc 패키지에서 나왔습니다.

위의 예에서 볼 수 있듯이 목록 항목 사이에 빈 줄이 허용됩니다.

목록 항목의 내용은 블록 수준 요소를 포함할 수 있으므로 다음을 수행할 수 있습니다.

*   First item

    A second paragraph

    * nested list

    > blockquote

*   Second item
  • First item

    A second paragraph

    • nested list

    blockquote

  • Second item

그러나 목록 항목 바로 뒤에 코드 블록을 갖고 싶을 때 문제가 있습니다. EOB 마커를 사용하여 이 문제를 피할 수 있습니다.

*   This is a list item.

    The second para of the list item.
^
    A code block following the list item.
  • This is a list item.

    The second para of the list item.

A code block following the list item.

목록 항목의 첫 번째 요소로 모든 블록 수준 요소를 가질 수 있습니다. 그러나 위에서 설명한 것처럼 목록 항목 마커가 있는 행의 선행 탭이나 공백은 제거됩니다. 이는 코드 블록을 첫 번째 요소로 사용하려는 경우 문제를 일으킵니다. 이 문제에 대한 해결책은 다음과 같은 구성입니다.

*⋅
⋅⋅⋅⋅⋅⋅⋅⋅This⋅is⋅a⋅code⋅block⋅(indentation⋅needs⋅to⋅be⋅4(1)+4(1)
⋅⋅⋅⋅⋅⋅⋅⋅spaces⋅(tabs)).
  • This is a code block (indentation needs to be 4(1)+4(1)
    spaces (tabs)).
    

목록 표시자 뒤에는 최소한 하나의 공백이나 탭이 있어야 합니다! 그렇지 않으면 행이 목록 항목의 시작으로 인식되지 않고 목록 표시자를 포함하는 단락으로 해석됩니다.

하나의 목록을 다른 목록 바로 뒤에 두고 싶다면(둘 다 동일한 목록 유형, 즉 순서가 지정되거나 정렬되지 않은) EOB 마커를 사용하여 둘을 구분해야 합니다.

* List one
^
* List two
  • List one

  • List two

단락이 줄 바꿈을 지원하기 때문에 일반적으로 간결한 중첩 목록을 생성할 수 없습니다.

*   This is just text.
    * this is a sub list item
      * this is a sub sub list item
* This is just text,
    spanning two lines
  * this is a nested list item.
  • This is just text.
    • this is a sub list item
      • this is a sub sub list item
  • This is just text, spanning two lines
    • this is a nested list item.

그러나 이것은 자주 사용되는 구문이므로 kramdown에서 지원합니다.

목록 항목 표시자처럼 보이는 것으로 단락을 시작하려면 이스케이프 처리해야 합니다. 이것은 순서가 지정된 목록의 마침표 또는 순서가 지정되지 않은 목록의 목록 항목 마커를 이스케이프하여 수행됩니다.

1984\. It was great
\- others say that, too!

1984. It was great - others say that, too!

처음에 언급했듯이 목록 항목에 속성을 적용하기 위한 선택적 IAL은 목록 항목 표시자 뒤에 사용할 수 있습니다.

* {:.cls} This item has the class "cls".
  Here continues the above paragraph.

* This is a normal list item.
  • This item has the class “cls”. Here continues the above paragraph.

  • This is a normal list item.

Definition Lists

이 구문 기능은 원래 Markdown 구문의 일부가 아닙니다. 아이디어와 구문은 PHP Markdown Extra 패키지에서 가져왔습니다.

정의 목록을 사용하면 하나 이상의 용어에 하나 이상의 정의를 할당할 수 있습니다.

정의 목록은 일반 단락 다음에 정의 마커(선택적으로 최대 3개의 공백까지 들여쓸 수 있는 콜론)가 있는 행이 오고, 그 다음 적어도 하나의 탭 또는 하나의 공백이 오고, 선택적으로 IAL 목록 항목에 적용한 다음 정의의 첫 번째 부분에 적용해야 합니다. 정의 마커가 있는 줄은 선택적으로 빈 줄로 이전 단락과 분리될 수 있습니다.

선행 탭이나 공백은 정의의 첫 번째 줄에서 제거되어 다음 정의 내용과 잘 정렬됩니다. 이전 단락의 각 줄은 용어로 간주되고 해당 줄은 범위 수준 요소로 별도로 구문 분석됩니다. 이러한 각 용어는 선택적으로 용어에 적용되어야 하는 IAL로 시작할 수 있습니다.

다음은 간단한 정의 목록입니다.

kramdown
: A Markdown-superset converter

Maruku
:     Another Markdown-superset converter
kramdown
A Markdown-superset converter
Maruku
Another Markdown-superset converter

같은 줄의 정의 마커 뒤에 나타나는 첫 번째 비공백 문자의 열 번호는 정의의 다음 줄에 사용해야 하는 들여쓰기를 지정합니다. 이러한 문자가 없는 경우 들여쓰기를 사용해야 하는 것은 공백 4개 또는 탭 1개입니다. 들여쓴 줄 다음에는 줄 바꿈으로 인해 들여쓰기가 있는 텍스트가 포함된 줄이 올 수 있습니다. 그러나 줄 바꿈에 대한 섹션에 설명된 규칙 외에도 목록 항목은 다른 정의 마커가 있는 줄을 만나면 끝납니다.

들여쓰기는 정의에서 제거되고 정의는 자연스럽게 정의 마커가 있는 행의 내용도 포함한다는 점에 유의하여 블록 수준 요소를 포함하는 텍스트로 처리됩니다. 둘 이상의 정의가 있는 경우, 용어에 대한 다른 모든 정의 마커는 최대 3개의 공백 또는 마지막 정의의 들여쓰기에 사용된 공백의 수에서 1을 뺀 숫자 중 더 작은 수까지 들여쓸 수 있습니다. 예를 들어:

definition term 1
definition term 2
: This is the first line. Since the first non-space characters appears in
column 3, all other lines have to be indented 2 spaces (or lazy syntax may
  be used after an indented line). This tells kramdown that the lines
  belong to the definition.
:       This is the another definition for the same term. It uses a
        different number of spaces for indentation which is okay but
        should generally be avoided.
   : The definition marker is indented 3 spaces which is allowed but
     should also be avoided.
definition term 1
definition term 2
This is the first line. Since the first non-space characters appears in column 3, all other lines have to be indented 2 spaces (or lazy syntax may be used after an indented line). This tells kramdown that the lines belong to the definition.
This is the another definition for the same term. It uses a different number of spaces for indentation which is okay but should generally be avoided.
The definition marker is indented 3 spaces which is allowed but should also be avoided.

따라서 위의 내용이 가능하고 이에 대한 2개의 용어와 3개의 정의가 있는 정의 목록을 생성하지만 동일한 정의 목록에서 다른(정의 마커 및 정의) 들여쓰기와 지연 들여쓰기를 사용하는 것은 권장되지 않습니다!

용어 정의는 텍스트 및/또는 블록 수준 요소로 구성됩니다. 정의 앞에 빈 줄이 있지 않은 경우 정의의 첫 번째 부분은 단락이면 텍스트가 됩니다.

definition term
: This definition will just be text because it would normally be a
  paragraph and the there is no preceding blank line.

  > although the definition contains other block-level elements

: This definition *will* be a paragraph since it is preceded by a
  blank line.
definition term
This definition will just be text because it would normally be a paragraph and the there is no preceding blank line.

although the definition contains other block-level elements

This definition will be a paragraph since it is preceded by a blank line.

목록 항목의 첫 번째 요소로 모든 블록 수준 요소를 갖는 규칙은 정의에도 적용됩니다.

처음에 언급했듯이 속성을 용어 또는 정의에 적용하기 위한 선택적 IAL을 사용할 수 있습니다.

{:#term} Term with id="term"
: {:.cls} Definition with class "cls"

{:#term1} First term
{:#term2} Second term
: {:.cls} Definition
Term with id=”term”
Definition with class “cls”
First term
Second term
Definition

Tables

이 구문 기능은 원래 Markdown 구문의 일부가 아닙니다. 구문은 PHP Markdown Extra 패키지의 구문을 기반으로 합니다.

때로는 완전한 HTML 테이블을 사용하는 것이 너무 많은 kramdown 문서에 간단한 테이블 형식 데이터를 포함하고 싶을 때가 있습니다. kramdown은 ASCII 테이블에 대한 간단한 구문으로 이를 지원합니다.

테이블은 선행 파이프 문자를 포함하거나 포함하지 않고 생성할 수 있습니다. 테이블의 첫 번째 줄에 줄 시작 부분에 파이프 문자가 포함되어 있으면(선택적으로 최대 3개의 공백까지 들여쓰기 가능) 모든 선행 파이프 문자(예: 앞에 공백이 있음)은 모든 테이블 행에서 무시됩니다. 그렇지 않으면 테이블 행을 테이블 셀로 나눌 때 무시되고 계산되지 않습니다.

테이블에서 사용할 수 있는 네 가지 선 유형이 있습니다.

  • 테이블 행은 테이블의 내용을 정의합니다.

    테이블 행은 하나 이상의 파이프 문자를 포함하고 다른 유형의 테이블 행으로 식별되지 않는 모든 행입니다! 테이블 행은 파이프 문자로 개별 테이블 셀로 나뉩니다. 선택적 후행 파이프 문자는 무시됩니다. 리터럴 파이프 문자는 코드 범위 또는 HTML <code> 요소에서 발생하는 경우 제외 해야 합니다!

    머리글 행, 바닥글 행 및 일반 행은 모두 이 테이블 행을 사용하여 수행됩니다. 표 셀에는 한 줄의 텍스트만 포함될 수 있으며 여러 줄의 텍스트는 지원되지 않습니다. 테이블 셀의 텍스트는 범위 수준 요소로 구문 분석됩니다.

    다음은 몇 가지 테이블 행의 예입니다.

    | First cell|Second cell|Third cell
    | First | Second | Third |
      
    First | Second | | Fourth |
    
  • 구분선은 테이블 본문을 여러 본문 부분으로 분할하는 데 사용됩니다.

    구분선은 파이프, 대시, 더하기, 콜론 및 공백/탭만 포함하고 하나 이상의 대시와 하나의 파이프 문자를 포함하는 모든 라인입니다. 파이프와 더하기 문자를 사용하여 열을 시각적으로 구분할 수 있지만 반드시 필요한 것은 아닙니다. 연속된 여러 구분선은 하나의 구분선으로 처리됩니다.

    다음은 구분선의 예입니다.

    |----+----|
    +----|----+
    |---------|
    |-
    | :-----: |
    -|-
    
  • 적어도 하나의 테이블 행 뒤의 첫 번째 구분선은 특별히 헤더 구분선으로 취급됩니다. 헤더 행을 일반 테이블 행과 구분하거나 열 정렬을 설정하는 데 사용됩니다. 헤더 구분선 위의 모든 테이블 행은 헤더 행으로 간주됩니다.

    헤더 구분선은 열 정렬 정의를 포함하도록 특별히 형식화될 수 있습니다. 정렬 정의는 선택적 공백/탭 뒤에 선택적 콜론, 하나 이상의 대시, 선택적 콜론 및 다른 선택적 공백/탭으로 구성됩니다. 정렬 정의의 콜론은 열의 정렬을 설정하는 데 사용됩니다. 콜론이 없으면 열은 기본 정렬을 사용하고, 대시 앞에만 콜론이 있으면 열이 왼쪽 정렬되고, 앞에 콜론이 있으면 열이 왼쪽 정렬됩니다. 대시 다음에 열이 가운데 정렬되고 대시 뒤에 콜론만 있으면 열이 오른쪽에 정렬됩니다. 각 정렬 정의는 한 열에 대한 정렬, 첫 번째 열에 대한 첫 번째 정렬 정의, 두 번째 열에 대한 두 번째 정렬 정의 등을 설정합니다.

    다음은 정렬 정의가 있는 헤더 구분선의 예입니다.

    |---+---+---|
    + :-: |:------| ---:|
    | :-: :- -: -
    :-: | :-
    
  • 바닥글 구분선은 일반 테이블 행과 바닥글 행을 구분하는 데 사용됩니다. 바닥글 구분선 아래의 모든 테이블 행은 바닥글 행으로 간주됩니다.

    바닥글 구분선은 대시가 등호로 대체된다는 점을 제외하면 일반 구분선과 비슷합니다. 바닥글 구분선은 표에서 한 번만 나타날 수 있습니다. 한 테이블에 여러 개의 바닥글 구분선이 사용되는 경우 마지막 구분선만 바닥글 구분선으로 처리되고 나머지는 모두 일반 구분선으로 처리됩니다. 바닥글 구분선 뒤에 사용되는 일반 구분선은 무시됩니다.

    다음은 바닥글 구분선의 예입니다.

    |====+====|
    +====|====+
    |=========|
    |=
    

후행 공백이나 탭은 모든 경우에 무시됩니다. 테이블 생성 및 유지 관리를 단순화하기 위해 머리글, 바닥글 및 일반 구분선은 테이블 행과 동일한 수의 열을 지정할 필요가 없습니다. |-|=도 유효한 구분 기호입니다.

위의 구성 요소가 주어지면 테이블은 다음과 같이 지정됩니다.

  • 선택적 구분선,
  • 선택적으로 0, 하나 이상의 테이블 행 다음에 헤더 구분선,
  • 선택적으로 구분선으로 산재된 하나 이상의 테이블 행,
  • 선택적으로 바닥글 구분선과 0, 하나 이상의 테이블 행 및
  • 선택적 후행 구분선.

참고

  • 테이블의 첫 번째 줄에는 공백이 아닌 첫 번째 문자 앞에 3개 이상의 공백이 있어서는 안 됩니다.
  • 테이블의 각 라인에는 적어도 하나의 이스케이프되지 않은 파이프 문자가 있어야 kramdown이 테이블에 속한 라인으로 인식할 수 있습니다.
  • 테이블은 블록 경계에서 시작하고 끝나야 합니다!

테이블 구문은 PHP Markdown Extra 에서 사용하는 구문과 다음과 같이 다릅니다.

  • kramdown 테이블에는 테이블 헤더가 필요하지 않습니다.
  • kramdown 테이블은 구분선을 사용하여 구성할 수 있습니다.
  • kramdown 테이블은 테이블 바닥글을 포함할 수 있습니다.
  • kramdown 테이블은 다른 블록 수준 요소와 분리되어야 합니다.

다음은 테이블 머리글 행, 두 개의 테이블 본문 및 테이블 바닥글 행이 있는 kramdown 테이블의 예입니다.

|-----------------+------------+-----------------+----------------|
| Default aligned |Left aligned| Center aligned  | Right aligned  |
|-----------------|:-----------|:---------------:|---------------:|
| First body part |Second cell | Third cell      | fourth cell    |
| Second line     |foo         | **strong**      | baz            |
| Third line      |quux        | baz             | bar            |
|-----------------+------------+-----------------+----------------|
| Second body     |            |                 |                |
| 2 line          |            |                 |                |
|=================+============+=================+================|
| Footer row      |            |                 |                |
|-----------------+------------+-----------------+----------------|
Default aligned Left aligned Center aligned Right aligned
First body part Second cell Third cell fourth cell
Second line foo strong baz
Third line quux baz bar
Second body      
2 line      
Footer row      

위의 예제 테이블은 ASCII 테이블 편집기의 도움 없이 생성하는 데 다소 시간이 걸립니다. 그러나 테이블 구문은 유연하며 위의 테이블은 다음과 같이 작성할 수도 있습니다.

|---
| Default aligned | Left aligned | Center aligned | Right aligned
|-|:-|:-:|-:
| First body part | Second cell | Third cell | fourth cell
| Second line |foo | **strong** | baz
| Third line |quux | baz | bar
|---
| Second body
| 2 line
|===
| Footer row
Default aligned Left aligned Center aligned Right aligned
First body part Second cell Third cell fourth cell
Second line foo strong baz
Third line quux baz bar
Second body      
2 line      
Footer row      

Horizontal Rules

콘텐츠를 시각적으로 구분하기 위한 가로 규칙은 3개 이상의 별표, 대시 또는 밑줄(한 줄에 혼합되지 않을 수 있음)을 사용하여 생성되며, 선택적으로 공백이나 탭으로 구분되며 그렇지 않은 경우 빈 줄에 표시됩니다. 첫 번째 별표, 대시 또는 밑줄은 선택적으로 최대 3개의 공백으로 들여쓸 수 있습니다. 다음 예는 수평선을 생성하는 다양한 가능성을 보여줍니다.

* * *

---

  _  _  _  _

---------------




Math Blocks

이 구문 기능은 원래 Markdown 구문의 일부가 아닙니다. 아이디어는 MarukuPandoc 패키지에서 나옵니다.

kramdown에는 LaTeX로 작성된 블록 및 스팬 레벨 수학에 대한 지원이 내장되어 있습니다.

수학 블록은 블록 경계에서 시작하고 끝나야 합니다. 두 개의 달러 기호를 사용하여 시작하며 선택적으로 최대 3개의 공백을 들여씁니다. 수학 블록은 줄 끝에 나타나는 다음 두 달러 기호(같은 줄에 있거나 다음 줄 중 하나에 있을 수 있음)까지 계속됩니다. 즉, 뒤에 공백 문자만 올 수 있습니다. 수학 블록의 내용은 유효한 LaTeX 수학이어야 합니다. \begin 문으로 시작하는 경우를 제외하고 항상 \begin{displaymath}...\end{displaymath} 환경 안에 래핑됩니다.

$$
\begin{aligned}
  & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right)
  = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\
  & (x_1, \ldots, x_n) \left( \begin{array}{ccc}
      \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\
      \vdots & \ddots & \vdots \\
      \phi(e_n, e_1) & \cdots & \phi(e_n, e_n)
    \end{array} \right)
  \left( \begin{array}{c}
      y_1 \\
      \vdots \\
      y_n
    \end{array} \right)
\end{aligned}
$$
\[\begin{aligned} & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right) = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\ & (x_1, \ldots, x_n) \left( \begin{array}{ccc} \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\ \vdots & \ddots & \vdots \\ \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) \end{array} \right) \left( \begin{array}{c} y_1 \\ \vdots \\ y_n \end{array} \right) \end{aligned}\]

(Javascript 라이브러리 MathJax 사용)를 다음과 같이 렌더링합니다.

ϕ(x,y)=ϕ(∑i=1nxiei,∑j=1nyjej)=∑i=1n∑j=1nxiyjϕ(ei,ej)=(x1,…,xn)⎛⎝⎜⎜⎜ϕ(e1,e1)⋮ϕ(en,e1)⋯⋱⋯ϕ(e1,en)⋮ϕ(en,en)⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜y1⋮yn⎞⎠⎟⎟⎟

인라인 수학을 사용하는 것도 쉽습니다. 수학 블록과 같이 두 개의 달러 기호로 수학 콘텐츠를 둘러싸기만 하면 됩니다. 인라인 수학 문을 시작하지 않으려면 달러 기호를 이스케이프 처리하면 됩니다. 그러면 간단한 달러 기호로 처리됩니다.

참고 인라인 수학 문에서 파이프 기호 |를 사용하는 LaTeX 코드는 행이 테이블 행으로 인식될 수 있습니다. 이 문제는 | 대신 \vert 명령을 사용하여 피할 수 있습니다!

수학 블록처럼 보이지만 실제로는 인라인 수학 문이 있는 단락이어야 하는 단락이 있는 경우 첫 번째 달러 기호를 이스케이프해야 합니다.

The following is a math block:

$$ 5 + 5 $$

But next comes a paragraph with an inline math statement:

\$$ 5 + 5 $$

The following is a math block:

\[5 + 5\]

But next comes a paragraph with an inline math statement:

\(5 + 5\)

인라인 수학 문조차 원하지 않으면 처음 두 달러 기호를 이스케이프 처리하십시오.

\$\$ 5 + 5 $$

$$ 5 + 5 $$

HTML Blocks

원래 Markdown 구문은 HTML 블록이 왼쪽 여백에서 시작해야 함을 지정합니다. 즉, 들여쓰기가 허용되지 않습니다. 또한 HTML 블록은 빈 줄로 둘러싸여야 합니다. Kramdown 문서에 대한 두 제한이 모두 해제됩니다. 또한 원래 구문에서는 kramdown에서 허용되는 HTML 블록에서 Markdown 구문을 사용할 수 없습니다.

비범위 수준 HTML 태그 또는 최대 3개의 공백으로 들여쓰기될 수 있는 일반 XML 태그(열기 또는 닫기)로 시작하는 행이 발견되면 HTML 블록이 잠재적으로 시작됩니다.

다음 HTML 태그는 범위 수준 HTML 태그로 계산되며 HTML 블록 행의 시작 부분에 있는 경우 HTML 블록을 시작하지 않습니다.

a abbr acronym b big bdo br button cite code del dfn em i img input
ins kbd label option q rb rbc rp rt rtc ruby samp select small span
strong sub sup textarea tt var

발견된 시작 태그의 추가 구문 분석은 태그 및 해당 콘텐츠가 구문 분석되는 세 가지 가능한 방법에 따라 다릅니다.

  • 원시 HTML 블록으로 구문 분석: HTML/XML 태그 콘텐츠를 원시 HTML로 처리해야 하는 경우 이 시점부터 HTML/XML 태그만 구문 분석되고 텍스트는 일치하는 종료 태그를 찾을 때까지 또는 구문 분석되지 않은 원시 텍스트로 처리됩니다. 문서 끝까지. 발견된 각 태그는 원시 HTML로 다시 구문 분석됩니다. 그러나 태그에 ‘markdown’ 속성이 있는 경우 이 속성은 이 태그 하나의 구문 분석을 제어합니다(아래 참조).

    파서는 기본적으로 올바른 XHTML만 지원합니다! 그러나 몇 가지 예외가 있습니다. 예를 들어 값이 없는 속성(예: boolean 속성)과 인용되지 않은 속성 값도 지원되며 <hr />와 같은 내용이 없는 요소는 <hr>로 작성할 수 있습니다. 유효하지 않은 닫는 태그가 발견되면 무시됩니다.

  • 블록 수준 요소로 구문 분석: HTML/XML 태그 콘텐츠가 블록 수준 요소를 포함하는 텍스트로 구문 분석되어야 하는 경우 해당 줄의 나머지 텍스트는 마치 별도의 줄에 나타나는 것처럼 블록 수준 구문 분석기에 의해 구문 분석됩니다 ( 주의: 이것은 또한 라인이 시작 태그, 텍스트 및 종료 태그로 구성된 경우 종료 태그를 찾을 수 없다는 것을 의미합니다!). 다음의 모든 행은 일치하는 종료 태그가 있는 HTML 블록 행을 찾거나 문서가 끝날 때까지 블록 수준 요소로 구문 분석됩니다.

  • 범위 수준 요소로 구문 분석: HTML/XML 태그 콘텐츠가 범위 수준 요소를 포함하는 텍스트로 구문 분석되어야 하는 경우 next 일치하는 종료 태그까지 또는 문서의 끝까지 모든 텍스트는 태그의 내용이 됩니다. 나중에 스팬 수준 파서에 의해 구문 분석됩니다. 이것은 또한 일치하는 종료 태그가 코드 범위로 보이는 내부에 있는 경우에도 여전히 사용된다는 것을 의미합니다!

종료 태그 뒤에 텍스트가 있으면 원시 HTML 블록 내부를 제외하고는 별도의 줄에 나타나는 것처럼 구문 분석됩니다.

또한 잘못된 닫는 태그가 발견되면 무시됩니다.

모든 HTML 태그와 속성 이름은 소문자로 변환됩니다!

기본적으로 kramdown은 모든 블록 HTML 태그와 모든 XML 태그를 원시 HTML 블록으로 구문 분석합니다. 그러나 이것은 parse_block_html로 구성할 수 있습니다. 이것이 true로 설정되면 HTML 블록의 구문 분석이 전역적으로 활성화됩니다. markdown 속성을 사용하여 태그별로 태그 구문 분석을 활성화/비활성화하는 것도 가능합니다:

  • HTML 태그에 markdown="0" 속성이 있는 경우 태그는 원시 HTML 블록으로 구문 분석됩니다.

  • HTML 태그에 markdown="1" 속성이 있는 경우 이 태그의 구문 분석을 위한 기본 메커니즘이 사용됩니다.

  • HTML 태그에 markdown="block" 속성이 있는 경우 태그의 내용은 블록 수준 요소로 구문 분석됩니다.

  • HTML 태그에 markdown="span" 속성이 있는 경우 태그 콘텐츠는 스팬 수준 요소로 구문 분석됩니다.

다음 목록은 markdown="1"이 적용되거나 parse_block_htmltrue일 때 기본적으로 어떤 모드에서 어떤 HTML 태그가 구문 분석되는지 보여줍니다.

원시 HTML로 구문 분석

script style math option textarea pre code kbd samp var

또한 모든 일반 XML 태그는 원시 HTML 블록으로 구문 분석됩니다.

블록 수준 요소로 구문 분석

applet button blockquote body colgroup dd div dl fieldset form iframe li
map noscript object ol table tbody thead tfoot tr td ul

스팬 수준 요소로 구문 분석

a abbr acronym address b bdo big cite caption code del dfn dt em
h1 h2 h3 h4 h5 h6 i ins kbd label legend optgroup p pre q rb rbc
rp rt rtc ruby samp select small span strong sub sup th tt var

a 또는 b와 같은 모든 범위 수준 HTML 태그는 HTML 블록을 시작하지 않는다는 것을 기억하십시오! 그러나 위 목록에는 ‘markdown’ 속성이 원시 HTML 블록 내부의 태그에 사용되는 경우 스팬 수준 HTML 태그도 포함됩니다.

다음은 parse_block_htmlfalse로 설정된 간단한 입력 및 HTML 출력입니다.

This is a para.
<div>
Something in here.
</div>
Other para.

This is a para.

Something in here.

Other para.

<p>This is a para.</p>
<div>
Something in here.
</div>
<p>Other para.</p>

This is a para.

Something in here.

Other para.

보시다시피 div 태그의 내용은 원시 HTML 블록으로 구문 분석되어 그대로 남습니다. 그러나 markdown="1" 속성이 div 태그에 사용된 경우 콘텐츠는 블록 수준 요소로 구문 분석되어 단락으로 변환됩니다.

한 번에 여러 HTML 태그를 사용할 수도 있습니다.

<div id="content"><div id="layers"><div id="layer1">
This is some text in the `layer1` div.
</div>
This is some text in the `layers` div.
</div></div>
This is a para outside the HTML block.
This is some text in the `layer1` div.
This is some text in the `layers` div.

This is a para outside the HTML block.

그러나 태그의 내용이 블록 수준 요소로 구문 분석되면 시작/종료 태그 뒤에 나타나지만 같은 줄에 나타나는 내용은 새 줄에 나타나는 것처럼 처리됩니다.

<div markdown="1">This is the first part of a para,
which is continued here.
</div>

<p markdown="1">This works without problems because it is parsed as
span-level elements</p>

<div markdown="1">The end tag is not found because
this line is parsed as a paragraph</div>

This is the first part of a para, which is continued here.

This works without problems because it is parsed as span-level elements

The end tag is not found because this line is parsed as a paragraph</div>

parse_block_htmltrue로 설정하면 원하지 않는 동작이 발생할 수 있으므로 일반적으로 markdown 속성을 사용하여 블록/스팬 수준 요소 구문 분석을 선택적으로 활성화 또는 비활성화하는 것이 좋습니다!

닫히지 않은 블록 수준 HTML 태그는 올바른 중첩과 잘못 사용된 끝 태그가 출력에서 제거되도록 문서 끝에서 올바르게 닫힙니다.

This is a para.
<div markdown="1">
Another para.
</p>

This is a para.

Another para. </p>

<p>This is a para.</p>
<div>
  <p>Another para.</p>
</div>

This is a para.

Another para.

  • XML 주석의 구문 분석도 지원됩니다.
  • XML 주석의 내용은 여러 줄에 걸쳐 있을 수 있습니다.
  • XML 주석의 시작은 줄의 시작 부분에만 나타날 수 있으며 선택적으로 최대 3개의 공백을 들여쓸 수 있습니다.
  • XML 주석 끝에 텍스트가 있으면 별도의 줄에 표시되는 것처럼 구문 분석됩니다.
  • XML 주석의 kramdown 구문이 처리되지 않습니다.
This is a para.
<!-- a *comment* -->
<!-- a `comment`
   spanning multiple lines
--> First part of para,
continues here.

This is a para. First part of para, continues here.

Text Markup

이러한 요소는 모두 스팬 수준 요소이며 블록 수준 요소 내에서 텍스트 조각을 마크업하는 데 사용됩니다. 예를 들어 링크를 쉽게 만들거나 특정 텍스트 부분에 강조를 적용할 수 있습니다.

빈 범위 수준 요소는 빈 HTML 태그로 변환되지 않고 출력에 있는 그대로 복사됩니다.

자동 링크, 인라인 링크 및 참조 링크의 세 가지 유형의 링크가 지원됩니다.

이것은 가장 만들기 쉬운 것입니다. 웹 주소나 이메일 주소를 꺾쇠 괄호로 묶기만 하면 주소가 적절한 링크로 바뀝니다. 주소는 링크 대상 및 링크 텍스트로 사용됩니다. 예를 들어:

Information can be found on the <http://example.com> homepage.
You can also mail me: <me.example@example.com>

Information can be found on the http://example.com homepage.
You can also mail me: me.example@example.com

자동 링크를 사용하여 다른 링크 텍스트를 지정할 수는 없습니다. 이를 위해 다른 링크 유형을 사용하십시오!

문구에서 알 수 있듯이 인라인 링크는 텍스트 흐름의 모든 정보를 인라인으로 제공합니다. 참조 스타일 링크는 텍스트 흐름의 링크 텍스트만 제공하고 다른 모든 것은 다른 곳에서 정의됩니다. 또한 링크 정의를 재사용할 수 있습니다.

인라인 스타일 링크는 링크 텍스트를 대괄호로 묶고 바로 뒤에 일반 괄호로 묶은 링크 URL(및 작은 따옴표 또는 큰 따옴표로 묶은 선택적 제목 앞에 최소 하나의 공백이 옴)이 오는 방식으로 만들 수 있습니다.

예를 들어:

This is [a link](http://rubyforge.org) to a page.
A [link](../test "local URI") can also have a title.
And [spaces](link with spaces.html)!

This is a link to a page.
A link can also have a title.
And spaces!

Notes:

  • 링크 텍스트는 일반 스팬 레벨 텍스트처럼 취급되므로 구문 분석 및 변환됩니다. 그러나 링크 텍스트 내에서 대괄호를 사용하는 경우 적절하게 중첩하거나 이스케이프 처리해야 합니다. 중첩 링크를 생성할 수 없습니다!

    링크 텍스트는 생략할 수도 있습니다. 링크 앵커를 만들기 위한 것입니다.

  • 링크 URL은 제목이 지정되지 않은 경우 적절하게 중첩된 괄호를 포함하거나 링크 URL이 꺾쇠 괄호 안에 포함되어야 합니다(잘못 중첩된 괄호 허용).

  • 링크 제목은 구분자를 포함할 수 없으며 비워 둘 수 없습니다.

  • 인라인 링크 뒤에 span IAL을 사용하여 추가 링크 속성을 추가할 수 있습니다. 예를 들면 다음과 같습니다.

    This is a [link](http://example.com){:hreflang="de"}
    

    This is a link

참조 스타일 링크를 만들려면 링크 텍스트를 대괄호(인라인 링크와 마찬가지로)로 묶고 선택적으로 공백/탭/줄 바꿈을 하고 선택적으로 링크 식별자가 포함된 다른 대괄호 세트를 따라야 합니다. 링크 식별자에는 닫는 대괄호가 포함될 수 없으며 링크 정의에 지정된 경우 개행 문자가 포함될 수 있습니다. 또한 대소문자를 구분하지 않으며 줄 바꿈과 탭이 공백으로 변환되고 여러 공백이 하나로 압축됩니다.

예를 들어:

This is a [reference style link][linkid] to a page. And [this]
[linkid] is also a link. As is [this][] and [THIS].

This is a reference style link to a page. And this is also a link. As is [this][] and [THIS].

링크 식별자를 지정하지 않거나(즉, 빈 대괄호만 사용) 두 번째 대괄호 쌍을 완전히 생략하면 잘못된 모든 문자를 제거하고 줄 바꿈을 위한 공백을 삽입하여 링크 텍스트가 유효한 링크 식별자로 변환됩니다. 링크 식별자에 대한 링크 정의가 있는 경우 링크가 생성됩니다. 그렇지 않으면 텍스트가 링크로 변환되지 않습니다.

인라인 링크와 마찬가지로 참조 링크 뒤에 span IAL을 사용하여 추가 링크 속성을 추가할 수 있습니다.

링크 정의는 문서의 아무 곳에나 넣을 수 있습니다. 출력에 나타나지 않습니다. 링크 정의는 다음과 같습니다.

[linkid]: http://www.example.com/ "Optional Title"

링크 정의는 여기에 설명되어 있지만 콘텐츠가 아닌 블록 수준 요소입니다.

링크 정의의 구조는 다음과 같습니다.

  • 대괄호 안의 링크 식별자, 선택적으로 최대 3개의 공백 들여쓰기,
  • 콜론과 하나 이상의 선택적 공백/탭,
  • 공백이 아닌 문자 또는 왼쪽 꺾쇠 괄호, 링크 URL 및 오른쪽 꺾쇠 괄호를 하나 이상 포함해야 하는 링크 URL,
  • 그런 다음 선택적으로 하나 이상의 공백으로 링크 URL과 분리되거나 다음 줄에 있는 작은따옴표 또는 큰따옴표로 묶인 제목이 임의의 수의 공백/탭으로 들여쓰기됩니다.

원래 Markdown 구문에서는 제목을 괄호 안에 지정할 수도 있습니다. 인라인 제목과의 일관성을 위해 허용되지 않습니다.

링크 정의처럼 보이지만 실제로는 링크와 일부 텍스트여야 하는 텍스트가 있는 경우 링크 식별자 뒤에 콜론을 이스케이프할 수 있습니다.

The next paragraph contains a link and some text.

[Room 100]\: There you should find everything you need!

[Room 100]: link_to_room_100.html

The next paragraph contains a link and some text.

Room 100: There you should find everything you need!

링크 정의는 콘텐츠가 아닌 블록 수준 요소이지만 block IALs를 사용하여 링크에 대한 추가 속성을 지정할 수 있습니다.

[linkid]: http://example.com
{:hreflang="de"}

Images

링크에서 사용하는 것과 유사한 구문을 통해 이미지를 지정할 수 있습니다. 차이점은 첫 번째 대괄호 앞에 느낌표를 사용해야 하고 일반 링크의 링크 텍스트가 이미지 링크의 대체 텍스트가 된다는 점입니다. 일반 링크와 마찬가지로 이미지 링크는 인라인 또는 참조 스타일로 작성할 수 있습니다.

예를 들어:

Here comes a ![smiley](images/smiley.png)! And here
![too](images/other.png 'Title text'). Or ![here].
With empty alt text ![](see.jpg)

Here comes a smiley! And here too. Or ![here]. With empty alt text

이미지에 대한 링크 정의는 일반 링크에 대한 링크 정의와 정확히 동일합니다. 스팬 및 블록 IAL을 통해 추가 속성을 추가할 수 있으므로 예를 들어 이미지 너비와 높이를 지정할 수 있습니다.

Here is an inline ![smiley](smiley.png){:height="36px" width="36px"}.

And here is a referenced ![smile]

[smile]: smile.png
{: height="36px" width="36px"}

Here is an inline smiley.

And here is a referenced smile

Emphasis

kramdown은 두 가지 유형의 강조를 지원합니다: 약함과 강한 강조. 단일 별표 * 또는 밑줄 _로 둘러싸인 텍스트 부분은 약한 강조 텍스트로 처리되고 두 개의 별표 또는 밑줄로 둘러싸인 텍스트 부분은 강한 강조 텍스트로 처리됩니다. 둘러싸다는 것은 시작 구분 기호 뒤에 공백이 오면 안 되며 중지 구분 기호 앞에 공백이 오면 안 됨을 의미합니다.

다음은 밝고 강한 강조가 있는 텍스트의 예입니다.

*some text*
_some text_
**some text**
__some text__

some text
some text
some text
some text

별표 형식은 단일 단어 내에서도 허용됩니다.

This is un*believe*able! This d_oe_s not work!

This is unbelieveable! This d_oe_s not work!

텍스트는 다른 구분 기호를 사용하여 밝고 강한 강조로 표시할 수 있습니다. 그러나 강한 내포 또는 밝게 강조된 텍스트 내 가벼움은 중첩할 수 없습니다.

This is a ***text with light and strong emphasis***.
This **is _emphasized_ as well**.
This *does _not_ work*.
This **does __not__ work either**.

This is a text with light and strong emphasis.
This is emphasized as well.
This does _not_ work.
This does __not__ work either.

하나 또는 두 개의 별표 또는 밑줄이 공백으로 둘러싸여 있으면 문자 그대로 처리됩니다. 별표나 밑줄의 문자적인 의미를 강제로 적용하려면 백슬래시로 이스케이프할 수 있습니다.

This is a * literal asterisk.
These are ** two literal asterisk.
As \*are\* these!

This is a * literal asterisk.
These are ** two literal asterisk.
As *are* these!

Code Spans

이는 code block 요소에 해당하는 범위 수준입니다. 백틱 `으로 둘러싸서 텍스트 부분을 코드 범위로 마크업할 수 있습니다. 예를 들어:

Use `<html>` tags for this.

Use <html> tags for this.

코드 범위의 모든 특수 문자는 올바르게 처리됩니다. 예를 들어, 코드 범위가 HTML로 변환될 때 <, >& 문자는 각각의 HTML 대응물로 대체됩니다.

코드 범위에 리터럴 백틱을 포함하려면 두 개 이상의 백틱을 구분 기호로 사용해야 합니다. 시작과 끝 구분 기호 앞에 하나의 선택적 공백을 삽입할 수 있습니다(이 공백은 출력에 사용되지 않음).

예를 들어:

Here is a literal `` ` `` backtick.
And here is ``  `some`  `` text (note the two spaces so that one is left
in the output!).

Here is a literal ` backtick.
And here is `some` text (note the two spaces so that one is left
in the output!).

공백으로 둘러싸인 단일 백틱은 리터럴 백틱으로 처리됩니다. 백틱의 문자 그대로의 의미를 강제로 적용하려면 백틱을 백슬래시로 이스케이프할 수 있습니다.

This is a ` literal backtick.
As \`are\` these!

This is a ` literal backtick.
As `are` these!
As with code blocks you can set the language of a code span by using an IAL:

This is a Ruby code fragment `x = Class.new`{:.language-ruby}

This is a Ruby code fragment x = Class.new

HTML Spans

HTML 태그는 블록 수준뿐만 아니라 스팬 수준에서도 사용할 수 있습니다. 스팬 수준 HTML 태그는 하나의 블록 수준 요소 내에서만 사용할 수 있으며 한 블록 수준 요소에는 시작 태그를, 다른 블록 수준 요소에는 끝 태그를 사용할 수 없습니다. 올바른 XHTML만 지원됩니다! 이것은 예를 들어 <br> 대신 <br />를 사용해야 함을 의미합니다(kramdown은 가능한 경우 이러한 오류를 수정하려고 시도하지만).

기본적으로 kramdown은 span HTML 태그 내에서 kramdown 구문을 구문 분석합니다. 그러나 이 동작은 parse_span_html 옵션으로 구성할 수 있습니다. true로 설정하면 HTML 범위에서 구문 분석이 활성화되고, false로 설정되면 구문 분석이 비활성화됩니다. markdown 속성을 사용하여 태그별로 태그 구문 분석을 활성화/비활성화하는 것도 가능합니다:

  • HTML 태그에 markdown="0" 속성이 있는 경우 해당 HTML 태그 내에서 구문 분석(HTML 범위 태그 구문 분석 제외)이 수행되지 않습니다.

  • HTML 태그에 markdown="1" 속성이 있는 경우 태그 콘텐츠는 스팬 수준 요소로 구문 분석됩니다.

  • HTML 태그에 markdown="block" 속성이 있는 경우 HTML 범위에 블록 수준 요소가 포함될 수 없고 속성이 무시되기 때문에 경고가 발생합니다.

  • HTML 태그에 markdown="span" 속성이 있는 경우 태그 콘텐츠는 스팬 수준 요소로 구문 분석됩니다.

범위 수준 HTML 태그의 내용은 일반적으로 범위 수준 요소로 구문 분석됩니다. 그러나 <script>와 같은 일부 태그는 구문 분석되지 않습니다. 즉, 내용이 수정되지 않습니다.

XML 주석도 사용할 수 있습니다(해당 내용은 구문 분석되지 않음). 그러나 HTML 태그와 마찬가지로 시작과 끝은 동일한 블록 수준 요소에 나타나야 합니다.

일반 스팬 레벨 HTML 및 XML 태그뿐만 아니라 스팬 레벨 XML 주석은 kramdown이 블록 레벨 요소가 아닌 스팬 레벨 요소로 올바르게 인식할 수 있도록 동일한 줄에 최소 하나의 공백이 아닌 문자가 와야 합니다. 그러나 모든 span HTML 태그(예: a, em, b, …, (열기 또는 닫기))는 줄의 시작 부분에 나타날 수 있습니다.

닫히지 않은 범위 수준 HTML 태그는 올바른 중첩을 보장하고 잘못 사용된 끝 태그 또는 블록 HTML 태그가 출력에서 제거되도록 범위 수준 텍스트 끝에서 올바르게 닫힙니다.

This is </invalid>.

This <span>is automatically closed.

This is </invalid>.

This is automatically closed.

<p>This is .</p>

<p>This <span>is automatically closed.</span></p>

This is .

This is automatically closed.

또한 HTML 범위 태그에서 하나 이상의 연속적인 새 줄 문자는 단일 공백으로 대체됩니다.

예를 들면 다음과 같습니다.

Link: <a href="some
link">text</a>

Link: text

<p>Link: <a href="some link">text</a></p>

Link: text

Footnotes

이 구문 기능은 원래 Markdown 구문의 일부가 아닙니다. 아이디어와 구문은 PHP Markdown Extra 패키지에서 가져왔습니다.

Kramdown의 각주는 참조 스타일 링크 및 링크 정의와 유사합니다. 텍스트의 올바른 위치에 각주 표시자를 배치해야 하며 실제 각주 내용은 문서의 어느 곳에서나 정의할 수 있습니다.

더 정확하게는 각주 이름을 대괄호 안에 넣으면 각주 마커를 만들 수 있습니다. 각주 이름은 캐럿(^)으로 시작하고 그 뒤에 단어 문자나 숫자가 오고 선택적으로 다른 단어 문자, 숫자 또는 대시가 와야 합니다.

예를 들어:

This is some text.[^1]. Other text.[^footnote].

This is some text.1. Other text.2.

각주 마커는 링크의 링크 텍스트의 일부로 사용할 수 없습니다. 이는 HTML에서 허용되지 않는 중첩 링크로 이어지기 때문입니다.

이름이 같은 각주 표시자는 동일한 각주 정의에 연결됩니다. 각주의 실제 이름은 문서에서 각주 마커의 위치를 통해 각주의 번호 매기기가 제어되기 때문에 중요하지 않습니다(처음 발견된 각주 마커는 번호 1, 두 번째 새 각주 마커는 번호 2 등). 식별자에 대한 각주 정의가 있는 경우 각주가 생성됩니다. 그렇지 않으면 각주 표시자가 각주 링크로 변환되지 않습니다. 또한 span IAL을 통해 설정된 모든 속성은 각주 표시에 대해 무시됩니다!

각주 정의는 각주의 내용을 정의하는 데 사용되며 다음과 같은 구조를 갖습니다.

  • 대괄호 안의 각주 이름, 선택적으로 최대 3개의 공백 들여쓰기,
  • 콜론과 하나 이상의 선택적 공백,
  • 각주의 텍스트
  • 그리고 선택적으로 표준 코드 블록에 대한 구문을 따라야 하는 다음 줄의 추가 텍스트(앞에 있는 4개의 공백/1개의 탭은 텍스트에서 자연스럽게 제거됨)

각주 정의는 여기에 설명되어 있음에도 불구하고 콘텐츠가 아닌 블록 수준 요소입니다.

전체 각주 내용은 블록 수준 텍스트처럼 취급되므로 모든 유효한 블록 수준 요소를 포함할 수 있습니다(또한 모든 블록 수준 요소가 첫 번째 요소가 될 수 있음). 코드 블록을 첫 번째 요소로 사용하려면 첫 번째 줄의 모든 선행 공백/탭이 제거된다는 점에 유의하십시오.

다음은 각주 정의의 예입니다.

[^1]: Some *crazy* footnote definition.

[^footnote]:
    > Blockquotes can be in a footnote.

        as well as code blocks

    or, naturally, simple paragraphs.

[^other-note]:       no code block here (spaces are stripped away)

[^codeblock-note]:
        this is now a code block (8 spaces indentation)

kramdown 문서에서 각주 정의를 어디에 두는지는 중요하지 않습니다. 참조된 모든 각주 정의의 내용은 kramdown 문서의 끝에 배치됩니다. 참조되지 않은 각주 정의는 무시됩니다. 둘 이상의 각주 정의에 동일한 각주 이름이 있는 경우 마지막을 제외한 모든 각주 정의가 무시됩니다.

각주 정의는 내용이 아닌 블록 수준 요소이지만 block IALs를 사용하여 속성을 첨부할 수 있습니다. 이러한 속성이 사용되는 방식은 변환기에 따라 다릅니다.

Abbreviations

이 구문 기능은 원래 Markdown 구문의 일부가 아닙니다. 아이디어와 구문은 PHP Markdown Extra 패키지에서 가져왔습니다.

kramdown은 전체 구문을 약어에 할당하는 구문을 제공합니다. 텍스트를 작성할 때 특별한 작업을 수행할 필요가 없습니다. 그러나 약어 정의를 추가하면 텍스트의 약어가 자동으로 마크업됩니다. 약어는 닫는 대괄호를 제외한 모든 문자로 구성될 수 있습니다.

약어 정의는 약어에 대한 전체 구문을 정의하는 데 사용되며 다음과 같은 구조를 갖습니다.

  • 별표 및 대괄호의 약어(선택적으로 최대 3개의 공백으로 들여쓰기),
  • 그런 다음 콜론과 약어의 전체 구문을 한 줄에 표시합니다(전체 구문에서 선행 및 후행 공백이 제거됨).

동일한 약어에 대한 이후의 약어 정의가 이전 약어 정의보다 우선하며 kramdown 문서에서 약어 정의를 어디에 두는지는 중요하지 않습니다. 빈 정의도 허용됩니다.

약어 정의는 내용이 아닌 블록 수준 요소이지만 block IALs를 사용하여 추가 속성을 지정할 수 있습니다.

여기 몇 가지 예가 있습니다.

This is some text not written in HTML but in another language!

*[another language]: It's called Markdown

*[HTML]: HyperTextMarkupLanguage
{:.mega-big}

This is some text not written in HTML but in another language!

약어 정의는 여기에 설명되어 있지만 콘텐츠가 아닌 블록 수준 요소입니다.

Typographic Symbols

원래 Markdown 구문은 이러한 변환을 지원하지 않습니다.

kramdown은 다음 일반 ASCII 문자를 해당하는 인쇄 기호로 변환합니다.

  • --- will become an em-dash (like this —)
  • -- will become an en-dash (like this –)
  • ... will become an ellipsis (like this …)
  • << will become a left guillemet (like this «) – an optional following space will become a non-breakable space
  • >> will become a right guillemet (like this ») – an optional leading space will become a non-breakable space

  • ---는 em 대시가 됩니다(이와 같이 —)
  • --는 en-대시가 됩니다(이와 같이 –)
  • ...는 줄임표가 됩니다(이와 같이 …)
  • <<는 왼쪽 길레메가 됩니다(예: «) – 선택적 다음 공백은 깨지지 않는 공백이 됩니다.
  • >>는 올바른 길레메가 됩니다(예: 이 ») – 선택적 선행 공백은 깨지지 않는 공백이 됩니다.

파서는 또한 일반 작은 ' 및 큰 따옴표 "를 “멋진 따옴표”로 바꿉니다. kramdown이 따옴표를 잘못 바꾸는 경우가 있을 수 있습니다. 이 경우에는 \'이스케이프\"만 사용하십시오. 그리고 그것들은 멋진 것으로 대체되지 않을 것입니다.

Non-content elements

이 섹션에서는 kramdown 문서에 사용되는 비 콘텐츠 요소, 즉 문서에 대한 콘텐츠를 제공하지 않지만 블록 수준 요소를 분리하거나 요소에 속성을 첨부하는 것과 같이 다른 용도로 사용되는 요소에 대해 설명합니다.

세 가지 비 콘텐츠 블록 수준 요소는 다음 위치에 더 잘 맞기 때문에 여기에서 설명하지 않습니다.

End-Of-Block Marker

EOB 마커는 표준 Markdown 구문의 일부가 아닙니다.

EOB(End-Of-Block) 마커(^가 없으면 빈 줄의 첫 번째 문자)는 블록 수준 요소가 사용된 이후에 계속 진행되더라도 블록 수준 요소의 끝을 지정하는 데 사용할 수 있는 블록 수준 요소입니다. 종료할 블록 수준 요소가 없으면 EOB 마커는 단순히 무시됩니다.

대부분의 kramdown 문서에서는 EOB 마커를 찾을 수 없지만, 그렇지 않으면 불가능한 원하는 결과를 얻기 위해 EOB 마커를 사용해야 하는 경우가 있습니다. 그러나 반드시 필요한 경우에만 사용해야 합니다!

예를 들어 다음은 두 개의 항목이 있는 하나의 목록을 제공합니다.

* list item one

* list item two

EOB 마커를 사용하여 각각 하나의 항목으로 두 개의 목록을 만들 수 있습니다.

* list one
^
* list two

Attribute List Definitions

이 구문 기능은 원래 Markdown 구문의 일부가 아닙니다. 아이디어와 구문은 Maruku 패키지에서 가져옵니다.

이것은 블록 및 스팬 레벨 요소에 속성을 추가하기 위한 Maruku 기능의 구현입니다(이름 지정도 Maruku에서 가져옴). 이 블록 수준 요소는 나중에 참조할 수 있는 속성을 정의하는 데 사용됩니다. 블록 인라인 속성 목록은 속성을 블록 수준 요소에 첨부하는 데 사용되며 스팬 인라인 속성 목록은 스팬 수준 요소에 속성을 첨부하는 데 사용됩니다.

다음은 속성 목록 정의(ALD)의 몇 가지 예이며 이후에 구문 설명이 제공됩니다.

{:ref-name: #myid .my-class}
{:other: ref-name #id-of-other title="hallo you"}
{:test: key="value \" with quote" and other='quote brace \}'}

ALD 라인의 구조는 다음과 같습니다.

  • 선택적으로 최대 3개의 공백이 앞에 오는 왼쪽 중괄호,
  • 다음에 콜론, 참조 이름 및 다른 콜론,
  • 다음에 속성 정의(허용되는 문자는 백슬래시로 이스케이프된 닫는 중괄호 또는 이스케이프되지 않은 닫는 중괄호를 제외한 모든 문자임),
  • 줄 끝까지 닫는 중괄호와 선택적 공백이 뒤따릅니다.

참조 이름은 단어 문자 또는 숫자로 시작해야 하며 선택적으로 다른 단어 문자, 숫자 또는 대시가 뒤에 와야 합니다.

하나 이상의 공백으로 구분해야 하는 네 가지 유형의 속성 정의가 있습니다.

references

유효한 참조 이름이어야 합니다. 다른 ALD의 속성도 이 ALD에 포함되도록 다른 ALD를 참조하는 데 사용됩니다. 이 참조 이름을 가진 속성 정의 목록이 없으면 속성을 수집할 때 참조 이름이 무시됩니다. 예를 들어, 단순 참조는 ‘id’와 같습니다.

key-value pairs

키-값 쌍은 키 이름으로 정의되며 참조 이름, 등호, 작은따옴표 또는 큰따옴표로 묶인 값에 대한 규칙을 따라야 합니다. 값 내에서 값 구분 기호(작은 따옴표 또는 큰 따옴표)를 사용해야 하는 경우 백슬래시로 이스케이프해야 합니다. 키-값 쌍을 사용하여 블록 또는 범위 수준 요소에 대한 임의의 속성을 지정할 수 있습니다. 예를 들어 키-값 쌍은 key1="bef \"quoted\" aft" 또는 title='This is a title'과 같습니다.

ID name

ID 이름은 해시를 사용한 다음 ASCII 알파벳 문자(A-Z 또는 a-z)로 시작해야 하는 식별자 이름을 사용하여 정의되며 선택적으로 다른 ASCII 문자, 숫자, 대시 또는 콜론이 뒤따릅니다. 자주 사용되는 키-값 쌍 id="IDNAME"의 줄임말입니다. ID 이름은 블록 또는 스팬 레벨 요소의 고유 ID를 지정합니다. 예를 들어 ID 이름은 #myid와 같습니다.

class names

클래스 이름은 점을 사용한 다음 공백, 점 문자 및 해시 문자를 제외한 모든 문자를 포함할 수 있는 클래스 이름을 사용하여 정의됩니다.

이것은 키-값 쌍 class="class-name"에 대한 (거의, 그러나 완전하지는 않음) 축약형입니다. 그것은 실제로 클래스 이름이 class 속성의 현재 값에 추가되어야 함을 의미하기 때문입니다. 다음 ALD는 모두 동일합니다.

{:id: .cls1 .cls2}
{:id: class="cls1" .cls2}
{:id: class="something" class="cls1" .cls2}
{:id: class="cls1 cls2"}

클래스 이름의 예에서 볼 수 있듯이 이전에 정의된 속성은 나중에 정의된 동일한 이름을 가진 속성으로 덮어씁니다.

또한 위의 4가지 유형 중 하나와 일치하지 않는 속성 정의 부분은 모두 무시됩니다.

참조 이름이 동일한 ALD가 두 개 이상 있는 경우 모든 ALD의 속성 정의는 하나의 ALD에 정의된 것처럼 처리됩니다.

Inline Attribute Lists

이러한 요소는 속성을 다른 요소에 첨부하는 데 사용됩니다.

Block Inline Attribute Lists

이 구문 기능은 원래 Markdown 구문의 일부가 아닙니다. 아이디어와 구문은 Maruku 패키지에서 가져옵니다.

이 블록 수준 요소는 다른 블록 수준 요소에 속성을 첨부하는 데 사용됩니다. 블록 인라인 속성 목록(블록 IAL)은 콜론/참조 이름/콜론 부분이 콜론으로 대체된다는 점을 제외하고는 ALD와 구조가 동일합니다. 블록 IAL(또는 둘 이상의 블록 IAL)은 속성이 첨부되어야 하는 블록 수준 요소 바로 앞이나 뒤에 배치되어야 합니다. 블록 IAL이 블록 수준 요소의 바로 앞 그리고 뒤에 있으면 선행 요소에 적용됩니다. 블록 IAL은 다른 모든 경우(예: 블록 IAL이 빈 줄로 둘러싸여 있는 경우)에서 무시됩니다.

IAL의 키-값 쌍은 참조된 ALD에서 동일한 이름의 키-값 쌍보다 우선합니다.

다음은 블록 IAL에 대한 몇 가지 예입니다.

A simple paragraph with an ID attribute.
{: #para-one}

> A blockquote with a title
{:title="The blockquote title"}
{: #myid}

{:.ruby}
    Some code here

A simple paragraph with an ID attribute.

A blockquote with a title

Some code here

Span Inline Attribute Lists

이 구문 기능은 원래 Markdown 구문의 일부가 아닙니다. 아이디어와 구문은 Maruku 패키지에서 가져옵니다.

이것은 스팬 레벨 요소에 대한 블록 인라인 속성 목록 버전입니다. 선행 및 후행 공백이 허용되지 않는다는 점을 제외하고 블록 IAL과 동일한 구조입니다. 범위 IAL(또는 둘 이상의 범위 IAL)은 적용되어야 하는 범위 수준 요소 바로 뒤에 넣어야 하며, 그 사이에 추가 문자가 허용되지 않습니다. 그렇지 않으면 무시되고 출력에서만 제거됩니다.

다음은 스팬 IAL에 대한 몇 가지 예입니다.

This *is*{:.underline} some `code`{:#id}{:.class}.
A [link](test.html){:rel='something'} and some **tools**{:.tools}.

This is some code.
A link and some tools.

특수 범위 IAL {::}에는 속성이 포함되어 있지 않지만 경고도 생성하지 않습니다. 분리되지 않으면 잘못 구문 분석되는 연속 요소를 분리하는 데 사용할 수 있습니다.

사용 사례는 다음과 같습니다.

This *is italic*{::}*marked*{:.special} text

This is italicmarked text

Extensions

이 구문 기능은 원래 Markdown 구문의 일부가 아닙니다.

확장은 추가 기능을 제공하지만 동일한 구문을 사용합니다. 블록 및 스팬 수준 요소로 사용할 수 있습니다.

확장 구문은 ALDs 구문과 매우 유사합니다. 다음은 확장을 지정하는 방법에 대한 몇 가지 예이며 이후에 구문 정의입니다.

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

{::options key="val" /}

Do you see ?

확장자는 본문을 포함하거나 포함하지 않고 지정할 수 있습니다. 따라서 확장에 대한 시작 및 종료 태그가 있습니다.

시작 태그의 구조는 다음과 같습니다.

  • 왼쪽 버팀대,
  • 뒤에 두 개의 콜론과 확장명,
  • 선택적으로 뒤에 공백 및 속성 정의가 옵니다.
  • 뒤에 슬래시와 오른쪽 중괄호(확장에 본문이 없는 경우) 또는 오른쪽 중괄호만(확장에 본문이 있는 경우).

중지 태그의 구조는 다음과 같습니다.

  • 왼쪽 버팀대,
  • 뒤에 콜론과 슬래시,
  • 선택적으로 확장 이름이 뒤에 옵니다.
  • 다음에 오른쪽 중괄호가 옵니다.

확장에 본문이 있는 경우에만 중지 태그가 필요합니다!

위의 구문은 범위 수준 확장에 대해 있는 그대로 사용할 수 있습니다. 블록 수준 확장의 시작 및 끝 줄은 다음과 같이 정의됩니다.

  • 시작 줄은 확장 시작 태그로 구성되며 선택적으로 최대 3개의 공백이 앞에 오고 줄 끝까지 선택적 공백이 뒤따릅니다.
  • 끝 줄은 확장 중지 태그로 구성되며 선택적으로 최대 3개의 공백이 앞에 오고 줄 끝까지 선택적 공백이 뒤따릅니다.

확장 시작 태그에 대한 끝 태그를 찾을 수 없는 경우 시작 태그는 본문이 없는 것처럼 처리됩니다. 유효하지 않은 확장 중지 태그가 발견되면 무시됩니다. 유효하지 않은 확장 이름이 지정되면 확장(및 최종적으로 지정된 본문)은 무시됩니다.

다음 확장은 kramdown과 함께 사용할 수 있습니다.

comment

본문 텍스트를 출력에 표시되지 않는 주석으로 처리하십시오.

nomarkdown

kramdown으로 body를 처리하지 말고 그대로 출력하세요. type 속성은 어떤 변환기가 본문을 출력해야 하는지 지정합니다. 속성이 없으면 모든 변환기가 본문을 출력해야 합니다. 그렇지 않으면 속성 값은 공백으로 구분된 변환기 이름 목록이어야 하며 이러한 변환기는 본문을 출력해야 합니다.

options

바디는 무시되므로 바디 없이 사용해야 합니다. kramdown 프로세서의 전역 옵션을 설정하는 데 사용됩니다(예: 자동 헤더 ID 생성 비활성화). 파서에서 사용하는 옵션은 즉시 적용되지만 다른 모든 옵션은 그렇지 않습니다! 이는 예를 들어 kramdown 문서의 일부에만 변환기 옵션을 설정할 수 없음을 의미합니다.

  1. Some crazy footnote definition. 

  2. Blockquotes can be in a footnote.

    as well as code blocks
    

    or, naturally, simple paragraphs. 

댓글남기기