본문 바로가기
ML, DL/환경설정 (마음의 평화)

[티스토리] 코드블럭 생성, 테마, 라인넘버 끝내기

by Wordbe 2020. 5. 16.

Code Block

티스토리에서 코드 블록을 생성하는 방법과 적당히 예쁘게 꾸미는 방법을 알아봅니다.

코드블록(Code block) 생성

1) 티스토리 에디터 > 더보기버튼 > 코드블럭 으로 생성하는 방법

티스토리 에디터에서 코드블럭을 클릭합니다.
코드를 입력하고, 언어를 선택한 뒤 확인버튼을 누르면 코드블럭이 생성됩니다.

 

2) 마크다운(Markdown)을 이용하는 방법

마크다운 문서를 편집하여 사용하신다면,

` 세 개로 코드를 둘러쌓으면 코드블럭을 생성할 수 있습니다.

​```javascript
    console.log("code block");
​```

위와 같이 첫번째 줄에 코드 언어도 기입할 수 있습니다.

생성한 후, 매우 기본적인 코드 블록 화면이 생성되었을 것입니다. 제 환경과는 다르게 말입니다.

그래서 이제 해볼 것은, 언어별로 코드블록 테마를 설정하고, 위 예시와 같이 코드 라인 숫자를 삽입하는 방법을 알아보겠습니다.

 


코드블록테마, Highlight.js

Highlight.js(https://highlightjs.org/) 는 189개의 프로그래밍 언어와 91가지 스타일을 지원합니다. (version 10.0.3 기준)

하이라이트.js가 지원하는 언어는 여기에서 확인이 가능합니다.

 

우리는 컨텐츠 전송 네트워크 방식인 CDN(contents delivery network)로 이 라이브러리를 가져올 것입니다.

티스토리 관리자 url 로 가셔서 좌측메뉴 > 꾸미기 > 스킨편집 을 클릭합니다.

html 편집을 누르셔서 <head> ... </head> 사이에 아무곳에나 아래 cdn 코드를 붙여넣어주시면 됩니다.

<link rel="stylesheet"
      href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/highlight.min.js"></script>

여기서 보시면 default 스타일을 고른 것을 알 수 있고, highlight 라이브러리를 가져온 것을 알 수 있습니다.

스타일은 위 홈페이지에 들어가셔서 마음에 드는 것을 고르시면 됩니다.

위 코드 2번째 라인의 default 대신 원하는 테마로 변경하시면 됩니다.

 

예를 들면 github 테마를 원하시면 아래와 같이 변경하세요.

<link rel="stylesheet"
      href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/github.min.css">

또 다른 예시는 Solarized Dark 입니다.

highlight.js의 여러가지 코드 블록 스타일

등록할 때는 모두 소문자로 바꾸시고, kebab-case 형식으로 아래와 같이 적어주시면됩니다.

<link rel="stylesheet"
      href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/solarized-dark.min.css">

스타일을 고르셨다면 마지막으로 아래 코드를 바로 아래 추가 시켜서 하이라이트 js 를 불러오는 것을 실행시켜 주도록 하면 됩니다.

<script>hljs.initHighlightingOnLoad();</script>

기타 궁금하신 사항, 기본적인 사용방법은 Highlight.js github (https://github.com/highlightjs/highlight.js#getting-the-library)에 상세하게 나와있습니다.


커스텀 설정

하이라이트.js 에서 가져온 테마를 사용하되, 나만의 블로그에 맞게 조금 더 설정을 해봅시다.

html, css 에 익숙하신 분들은 원리를 금방 아실 것 같습니다.

그렇지 않더라도 제가 한 예시 코드를 제공해드릴테니, 복사하시면 됩니다.

코드블록을 생성하면,

<pre>
    <code>
        console.log("code block");
    </code>
</pre>

<pre><code> 태그가 자동으로 생성됩니다.

또한 마크다운 문법에서는 ` 로 코드를 둘러 쌓으면 이 블록 처럼 작은 코드 블록이 생깁니다. 이 때는

<p>
    <code>
        이 블록
    </code>
</p>

와 같이 html 태그 코드가 생성됩니다.

위 사실을 알았으니, css에서 이 태그에 접근해서 디자인을 수정해봅시다.

마찬가지로 스킨 편집 > html 변경 > css 변경 탭을 들어가셔서 수정하시면 됩니다.

1 폰트, 블럭 설정

/* Code block style */
code {
    padding: 0.25rem;
    background-color: #F1F1F1;
    border-radius: 5px;
    font-family: "Consolas", "Sans Mono", "Courier", "monospace";
    font-size: 0.75rem;
}
pre > code {
    margin: 1rem auto;
}

font-family로 폰트를 설정합니다. 지원되는 폰트가 있으면 앞에서부터 우선순위로 폰트가 적용됩니다.

code의 속성을 공유하되,

코드블럭이면 (pre 안에 있는 code 이면) 마진 속성을 추가해주었습니다. 아래, 위 글이랑 코드블럭이랑 간격을 조금 띄워놓았고, 좌우는 중앙정렬 되도록 auto로 설정하였습니다.

2 Scroll 설정

pre > code {
    margin: 1rem auto;
    white-space: pre;
    max-width:850px; 
    max-height:500px; 
    overflow:auto !important; /* scroll setting */
}

코드 블록의 최대, 최소 픽셀을 설정한 뒤, 코드가 길어서 넘치면(overflow) 자동으로 스크롤이 생기게 해주는 설정입니다. 코드가 길지 않으면 스크롤은 표시되지 않습니다.

!important 는 다른 css 설정에서 덮어씌워지지 않게 하는 설정입니다.

지금까지 <pre>, <code> 태그를 조작하는 방식으로 수정을 했지만,

hightlight.js 라이브러리가 사용된 코드블럭은 hljs 클래스에 속하게 되므로 .hljs 클래스를 조작해도 됩니다.

.hljs {
    white-space: pre;
    max-width:850px; 
    max-height:500px; 
    overflow:auto !important; /* scroll setting */
}

둘 다 잘 동작하니, 기호에 맞게 사용하시면 됩니다.


Line number 설정

코드 블럭에 줄 숫자를 표시하기 위해 hilightjs-line-number (https://github.com/wcoder/highlightjs-line-numbers.js) 을 사용합니다.

html 의 head 사이에 아래 cdn 코드를 추가하여 라이브러리를 가져옵니다.

<script src="//cdnjs.cloudflare.com/ajax/libs/highlightjs-line-numbers.js/2.7.0/highlightjs-line-numbers.min.js"></script>
<script>hljs.initLineNumbersOnLoad();</script>

또한 기본 설정을 조금 변형해보았습니다.

/* for block of numbers */
.hljs-ln-numbers {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;

    text-align: center;
    color: #ccc;
    /* border-right: 1px solid #CCC; */
    vertical-align: top;
    padding-right: 5px;

    /* your custom style here */
}

/* for block of code */
.hljs-ln-code {
    padding-left: 10px;
    text-indent: 0.75rem; /* indent added */
}

hilightjs-line-number 사이트에서 기본 설정을 위 코드를 통해 하라고 제공해주었고, 저는 여기서 line의 border를 없애고, code에서는 왼쪽의 들여쓰기(text-indent)를 추가해보았습니다.

무언가 원하지 않았던 스타일

그런데, UI 상의 문제가 보입니다.

기존 스킨의 css 에서 table 에 기본값으로 적용해놓은 보더 등의 설정값 때문입니다.

highlight-line-number 는 이 table 속성에 영향을 받습니다.

따라서 만약 저와 같은 오류가 있다면, 이를 수정할 필요가 있습니다.

.entry-content table {
    width:100%;
    margin-bottom: 22px;
    border: 1px solid #e6e6e6;
    border-collapse: collapse;
    text-align: center;
    font-size: 0.9375em;
    line-height: 1.5714;
    color: #666;
}
.entry-content table thead th {
    padding:7px 0 11px;
    border-left: 1px solid #e6e6e6;
}
.entry-content table tbody td {
    padding:7px 0 11px;
    border-left: 1px solid #e6e6e6;
    border-top: 1px solid #e6e6e6;
}

을 아래와 같이 바꿔서

.entry-content > table {
    width:100%;
    margin-bottom: 22px;
    border: 1px solid #e6e6e6;
    border-collapse: collapse;
    text-align: center;
    font-size: 0.9375em;
    line-height: 1.5714;
    color: #666;
}
.entry-content > table thead th {
    padding:7px 0 11px;
    border-left: 1px solid #e6e6e6;
}
.entry-content > table tbody td {
    padding:7px 0 11px;
    border-left: 1px solid #e6e6e6;
    border-top: 1px solid #e6e6e6;
}

엔트리-컨텐츠의 자식인 테이블의 경우만 저 속성을 사용하도록, 스킨 전체의 설정을 살짝 바꿔보았습니다.

<code> 안의 table을 커스텀 설정하는 등 또 다른 좋은 방법도 생각해 볼 수 있을 것입니다.

728x90

댓글28