web
obsidian
web_typography
css

2024-07-01

옵시디언 인터페이스의 본문을 조판하자.

‘빽빽한 본문 오래 읽히기’의 대가라고 할 수 있는 오래된 공학 전공서적들의 본문조판을 참고했다.

  • 산세리프/세리프 각각 1개
  • regular/bold, normal/italic 쓰임새 구분
  • 문자 정렬 방식과 들여쓰기로 만들어지는 규칙적인 여백을 통해 위계 구분

서체 선정

font-family: 라틴서체, 한글서체, default 순서대로 나열하면 라틴서체에 없는 글리프를 그 다음 한글서체가 때우는 식으로 섞어짜기가 된다.

산세리프 서체는 라틴과 한글 모두 커버하는 Pretendard를, 라틴 세리프 서체는 x-height가 높고 contrast가 크지 않은 ITC Slimbach Std를, 한글 세리프 서체는 ITC Slimbach Std와 잘 어울리는 Noto Serif KR을 선택했다.

타입세팅

제목

css VariableValue
서체—inline-title-fontITC Slimbach Std Book
크기—inline-title-size2.3em
행송—inline-title-line-height1.2
자간letter-spacing-0.015em

소제목

css VariableValue
서체—hX-fontPretendard Bold
크기—hX-size2em-1em
행송—hX-line-height1.2-1.5
자간letter-spacing-0.015em-0.01em

본문

css VariableValue
서체—font-text-themeNoto Serif KR medium
크기font-text-size16px
행송line-height-normal1.5
자간--

공통

css VariableValue
문자정렬directionltr
하이픈white-spacekeep-all
최대 글줄길이—file-line-width630px(=37em)
단락구분-한줄(의 절반정도)비우기

웹폰트 사용하기

@import문은 옵시디언에서 안 된다. 어도비 웹폰트 url은 .css로 끝나는 @import 형식인데 그 url을 크롬 주소창에 쳐 보면 @font-face들이 나오는데 그걸 그대로 가져오면 된다. ttf otf 안되고 woff2나 Base64만 된다.

섞어짜기 문제

ITC Slimbach Std가 한글에 비해 작아서 크기 좀 키우려고 했는데 서로 다른 폰트/언어에 서로 다른 font-size 적용이 안된다. javascript로는 가능할텐데 옵시디언 테마 파일에 javascript를 포함하는 건 안될 듯하다.

두 글꼴 섞어서 섞어짜기 웹폰트 만드는 프로그램 없나? → multilingual.js라는 라이브러리가 있는 것 같은데 나중에 사용해보기로

들여짜기 문제

이번에는 들여짜기에서 막혔다. 옵시디언에는 source view와 reading view 두 가지가 있는데 둘의 html태그나 구조가 다르다. 그래서 둘의 외관을 통일하기 위해서는 (가능하면 :root나 body같이 상위 요소에 써야겠지만 그러지 않을 경우에는) 두 개의 요소를 동시에 선택해야 한다. 근데 너무 복잡해서 선택하기가 어렵다.

나중에 깨달은 거지만 선택자를 가능하면 단순하게 하는 게 유지보수에는 물론 디자인에도 좋다. 괴랄한 선택자를 써서 아주 특정한 요소를 선택해 스타일링하는 게 최선인 경우는 별로 없다.

내가 하고 싶은건 한줄비우기 다음 첫 단락에서는 들여짜기를 하지 않는다는 간단한 규칙이었는데 이것 역시 자바스크립트로는 됐겠지만 테마파일이라 CSS만 써야해서 못했다. 사실 CSS로도 할 수 있을 것 같긴 한데… 나중에 다시 해보자…

html과 마크다운 사이 엄청난 간극이 있다. 그 중 하나는 enter를 쳤을때 source view에서는 새로운 단락<div>가 만들어지는데 reading view에서는 <br> 친걸로 간주하고 여전히 같은 <p> 안이다. 그래서 들여쓰기가 생겨야 할 곳에 생기지 않는다. reading view에서는 enter를 두 번은 쳐야 새로운 <div>가 만들어진다.