본문으로 건너뛰기
TDSMoring 디자인 시스템

MathText

수식이 섞인 글을 그린다. 서버가 미리 그려 둔 수식(SVG)을 글자 사이에 끼워 넣고, 없으면 읽을 수 있는 글자로 대신 보여 준다.

이 페이지의 목차
분류
학습 콘텐츠
가져오기
import { MathText } from '@/ui/MathText'
코드 위치
apps/mobile/src/ui/MathText.tsx:21

미리보기#

실제 컴포넌트를 화면에 그린 것이다. 화면 아래의 서비스 색 선택기로 색을 바꿔 볼 수 있다. 버튼과 입력 칸은 직접 눌러 볼 수 있다.

이차식 x2 + 2x + 1 의 값을 인수분해로 구하시오.
수식이 든 문장
이차식 x2 + 2x + 1 에서 x = 일 때 값은 0이다.
빈칸(blank)
미리보기의 그림은 실제 자료가 아니라 모양을 보여 주는 그림이다.

언제 쓰는가#

쓴다

  • 문제, 보기, 해설, 개념처럼 수식이 들어갈 수 있는 모든 글에 AppText 대신 쓴다.
  • ____(밑줄 네 개)를 빈칸으로 바꾸려면 blank에 요소를 넘긴다.
  • 강조(굵게), 밑줄, 표시(형광펜) 표식이 있는 글은 segments로 넘긴다.

쓰지 않는다

  • 수식이 없는 평범한 라벨에는 쓰지 않는다. AppText를 쓴다.
  • 수식을 이미지로 따로 만들어 넣지 않는다. 글자 크기 설정을 따르지 않게 된다.

종류#

MathText 종류
이름설명
미리 그린 수식segments가 있으면 수식은 SVG다. 크기는 글자 크기를 따르고, 글자의 x-높이(크기의 절반)에 맞춰 그려진다.
글자만segments가 없으면 $…$의 달러 기호를 빼고 읽을 수 있는 글자로 보여 준다.
표식b 굵게, u 시험지식 밑줄, hl 단어 뒤 옅은 형광 표시.

크기#

MathText 크기
이름값설명
글자 스타일`variant`(기본 `body`)수식은 시스템 글자 크기(최대 1.6배)와 앱 글자 크기 배율을 함께 따라 커진다.

상태#

MathText 상태
상태모습과 동작
빈칸blank가 있고 글에 ____가 있으면 그 자리에 요소를 넣는다.
긴 문장단어 단위로 나뉘어 수식 둘레에서도 줄바꿈이 된다. 한국어 단어는 중간에서 끊기지 않는다.

사용 방법#

기본

기본
import { MathText } from '@/ui/MathText';

<MathText text={question.text} segments={question.render?.text} variant="question" />

빈칸

빈칸
<MathText text="x = ____ 일 때 값은 0이다." blank={<View style={styles.blank} />} />

속성(props)#

MathText 속성
이름타입기본값필수설명
textstring—필수글. 수식은 $…$로 쓴다.
segmentsSegment[] | null—선택서버가 미리 그린 조각 목록({ t: "text", v } 또는 { t: "math", svg, w, h, va, tex }). 있으면 text보다 우선한다.
variantTextVariant'body'선택글자 스타일. 기본 "body".
colorstringpalette.text선택글자 색. 기본 color.text.
styleTextStyle—선택추가 글자 스타일.
blankReactElement—선택____ 자리에 넣을 요소.

치수와 토큰#

수식 크기
글자 크기 × (시스템 배율, 최대 1.6) × (앱 배율). 1ex = 크기 × 0.5
표식
굵게 = Bold, 밑줄 = 시험지식 밑줄, 표시 = 단어 뒤 옅은 배경
글자 폴백
$x^2$ → x^2 (달러 기호 제거)

접근성#

  • 수식은 그림이지만 원문(tex)이 읽을 수 있는 글자로 보존된다. 접근성 이름에는 글자 폴백을 쓴다.
  • 글자 크기 설정과 시스템 설정에 따라 커지므로 부모의 높이를 고정하지 않는다.

글자 색 대비

글자 크기별 기준: 작은 글자는 4.5:1 이상, 큰 글자(굵은 18.66px 이상)는 3:1 이상이다. 값은 선택한 서비스와 모드의 토큰으로 계산했다.

MathText 글자 색 대비
쓰임글자색바탕대비기준
본문textsurface17.15:1 통과15.25:1 통과16.13:1 통과10.92:1 통과4.5:1 (작은 글자)

잘한 예와 잘못한 예#

이차식 x2 + 2x + 1 의 값을 인수분해로 구하시오.
잘한 예수식이 있을 수 있는 모든 글에 쓴다.
수식이 사진으로 들어간 문제
잘못한 예수식을 이미지로 따로 넣지 않는다. 글자 크기 설정을 따르지 않는다.
  • Blocks: 문제 본문, 보기, 해설을 이루는 블록(문단, 보기 상자, 수식, 표, 그래프, 그림)을 위에서 아래로 그린다. RichText는 그중 문단 하나다.
  • AppText: 앱의 모든 글자를 그리는 컴포넌트다. 글자 스타일 11종 중 하나를 variant로 고르면 크기, 줄 높이, 굵기, 자간이 정해진다.
  • PaperType: 안쪽의 모든 글자를 시험지 서체(Noto Serif KR)로 바꾸는 감싸개다. 모의고사 시험지 화면에 쓴다.