유니코드 문자 입력하기

유니코드 문자 입력하기 (unicode_entry)

터미널·셸·편집기에서 유니코드 문자를 입력하는 방법을 다루는 문서예요.

Raku는 유니코드 문자를 변수 이름으로 쓸 수 있어요. 많은 연산자(특히 집합/가방 연산자)와 일부 따옴표 구성도 유니코드 기호로 정의돼 있죠. 그래서 이런 기호를 편집기, Raku 셸, 명령행에 어떻게 입력하는지 아는 게 좋아요. 특히 키보드에 실제 문자로 없는 기호라면 더 그렇고요.

각 운영체제·환경에서 유니코드를 입력하는 일반적인 방법은 위키백과의 unicode input 문서를 참고하세요.

XCompose (Linux)

Xorg는 Compose 키를 쓰는 digraph(이중 문자) 입력을 지원해요. 기본값 AltGr + ShiftCapslock처럼 더 쉬운 키로 바꿀 수 있어요. GNOME 2와 MATE에서는 Preferences → Keyboard → Layouts → Options → Position of Compose Key에서 설정할 수 있어요. 예를 들어 »+«를 입력하려면 CAPSLOCK > > + CAPSLOCK < <처럼 누르면 돼요.

XCompose는 .XCompose 파일로 digraph 시퀀스를 직접 정의할 수 있고, https://github.com/kragen/xcompose/blob/master/dotXCompose는 아주 완성도 높은 예제예요. GNOME은 XCompose를 하드코딩된 목록으로 덮어썼는데, 환경에 GTK_IM_MODULE=xim을 설정하면 XCompose를 복원할 수 있어요. uim-xim 같은 xim 브리지를 설치해야 할 수도 있어요.

모든 프로그램에서 compose 동작시키기

모든 프로그램에서 compose 키가 동작하지 않을 때는 ibus를 시도해 볼 수 있어요.

input_module=xim
export GTK_IM_MODULE=$input_module
export XMODIFIERS=@im=$input_module
export QT_IM_MODULE=$input_module

모든 사용자에게 적용하려면 /etc/profile.d/compose.sh 파일에 넣으면 돼요. GUI 환경마다 환경변수 설정 방식이 달라서 신경 쓸 필요 없으니 이 방법이 가장 쉬워요.

KDE를 쓴다면 이 파일을 ~/.config/plasma-workspace/env/compose.sh에 두면 돼요. 다른 데스크톱 환경은 방식이 달라요. 자기 환경에서 환경변수를 설정하는 방법을 찾아보거나 위의 시스템 전역 방법을 쓰세요.

ibus

xim 입력 모듈로 🐧 같은 높은 코드포인트 기호를 입력하는 데 문제가 있다면 ibus를 쓸 수 있어요. 배포판에 맞는 ibus 패키지를 설치하고, 데스크톱 환경이 로드될 때 시작되도록 설정해야 해요. 실행해야 하는 명령은:

ibus-daemon --xim --verbose --daemonize --replace

--xim을 설정하면 ibus를 쓰지 않는 프로그램도 여전히 xim 입력 방식을 사용할 수 있고 하위 호환도 유지돼요.

XKB (Linux)

X 윈도 시스템은 XKB 확장으로 키보드 이벤트를 받는데, 설정 파일만 있으면 다양한 종류의 키보드 출력을 읽을 수 있어요.

XKB는 다중 레이아웃(multi-layout) 또는 시프트 레벨(shift level) 개념을 제공해요. 예를 들어 a라는 기호는 "A"로 표시된 키의 레벨 1 출력이고, A는 보통 시프트 키로 도달하는 레벨 2 레이아웃에 속해요. 더 많은 레벨이 있는데, 오른쪽 Alt 키(AltGr) 같은 특정 키를 레벨 3 스위치로 설정할 수 있어요. 레벨 3 수정자와 시프트 키를 함께 누르면 레벨 4 레이아웃으로 전환돼요. XKB는 레벨 5 스위치 키도 추가할 수 있어서, 시프트 키와 함께 쓰면 레벨 6 레이아웃으로 전환돼요.

자세한 설명은 이 페이지를 참고하세요.

이 방법의 장점은 일반 키보드로는 거의 입력할 수 없는 문자를, 대문자를 입력하듯 시프트와 다른 키의 조합만으로 입력할 수 있다는 거예요.

단일 사용자 설정

개인 설정에는 .xkb 파일과 symbols 하위 디렉터리의 기호 파일만 만들면 충분해요. .xkb 파일은 이 명령으로 만들 수 있어요.

setxkbmap -print > raku.xkb

이런 파일의 예시가 있죠.

xkb_keymap {
  xkb_keycodes  { include "evdev+aliases(qwerty)" };
  xkb_types     { include "complete" };
  xkb_compat    { include "complete" };
  xkb_symbols   { include "pc+raku(raku)+inet(evdev)+level3(ralt_switch)+compose(caps)" };
};

이 파일은 키보드가 만들어내는 키코드와 화면에 표시되는 기호를 선언해요.

여기서는 symbols/raku 파일에 설정이 있는 PC형 키보드인데, 그 안에 여러 변형이 있고 그중 raku라는 이름이 선택됐어요. evdev 범용 입력 이벤트 인터페이스가 이벤트 수집을 관리해요. 이 설정은 오른쪽 Alt 키를 레벨 3 스위치로, Caps Lock을 Compose 키로 사용해요.

설정 파일의 기본 디렉터리(예: $HOME/.config/xkb)를 정하고 raku.xkb를 거기에 둔 다음, symbols 디렉터리를 만들고 키 레이아웃 파일을 넣어야 해요. raku라는 이름의 그런 파일 예시예요:

default  partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {

    name[Group1]= "English (US)";

    key <TLDE> {  [     grave,  asciitilde  ]  };
    key <AE01> {  [    1,  exclam     ]  };
    key <AE02> {  [    2,  at    ]  };
    key <AE03> {  [    3,  numbersign  ]  };
    key <AE04> {  [    4,  dollar    ]  };
    key <AE05> {  [    5,  percent    ]  };
    key <AE06> {  [    6,  asciicircum  ]  };
    key <AE07> {  [    7,  ampersand  ]  };
    key <AE08> {  [    8,  asterisk  ]  };
    key <AE09> {  [    9,  parenleft  ]  };
    key <AE10> {  [    0,  parenright  ]  };
    key <AE11> {  [     minus,  underscore  ]  };
    key <AE12> {  [     equal,  plus    ]  };

    key <AD01> {  [    q,  Q     ]  };
    key <AD02> {  [    w,  W    ]  };
    key <AD03> {  [    e,  E    ]  };
    key <AD04> {  [    r,  R    ]  };
    key <AD05> {  [    t,  T    ]  };
    key <AD06> {  [    y,  Y    ]  };
    key <AD07> {  [    u,  U    ]  };
    key <AD08> {  [    i,  I    ]  };
    key <AD09> {  [    o,  O    ]  };
    key <AD10> {  [    p,  P    ]  };
    key <AD11> {  [ bracketleft,  braceleft  ]  };
    key <AD12> {  [ bracketright,  braceright  ]  };

    key <AC01> {  [    a,  A     ]  };
    key <AC02> {  [    s,  S    ]  };
    key <AC03> {  [    d,  D    ]  };
    key <AC04> {  [    f,  F    ]  };
    key <AC05> {  [    g,  G    ]  };
    key <AC06> {  [    h,  H    ]  };
    key <AC07> {  [    j,  J    ]  };
    key <AC08> {  [    k,  K    ]  };
    key <AC09> {  [    l,  L    ]  };
    key <AC10> {  [ semicolon,  colon    ]  };
    key <AC11> {  [ apostrophe,  quotedbl  ]  };

    key <AB01> {  [    z,  Z     ]  };
    key <AB02> {  [    x,  X    ]  };
    key <AB03> {  [    c,  C    ]  };
    key <AB04> {  [    v,  V    ]  };
    key <AB05> {  [    b,  B    ]  };
    key <AB06> {  [    n,  N    ]  };
    key <AB07> {  [    m,  M    ]  };
    key <AB08> {  [     comma,  less    ]  };
    key <AB09> {  [    period,  greater    ]  };
    key <AB10> {  [     slash,  question  ]  };

    key <BKSL> {  [ backslash,         bar  ]  };
};

partial alphanumeric_keys
xkb_symbols "raku" {

   include "raku(basic)"
   name[Group1]= "English (raku operators, with AltGr)";

   key <TLDE> { [     grave, asciitilde, dead_grave, leftsinglequotemark   ] }; //‘
   key <AE01> { [         1,     exclam,      U00B9                        ] }; //¹
   key <AE02> { [         2,         at,      U00B2                        ] }; //²
   key <AE03> { [         3, numbersign,      U00B3,      U2026            ] }; //³…
   key <AE04> { [         4,     dollar,      U2074                        ] }; //⁴
   key <AE05> { [         5,    percent,      U2075                        ] }; //⁵
   key <AE06> { [         6,asciicircum,      U2076                        ] }; //⁶
   key <AE07> { [         7,  ampersand,      U2077                        ] }; //⁷
   key <AE08> { [         8,   asterisk,      U2078,      multiply         ] }; //⁸×
   key <AE09> { [         9,  parenleft,      U2079                        ] }; //⁹
   key <AE10> { [         0, parenright,      U2070                        ] }; //⁰
   key <AE11> { [     minus, underscore,      U2212,      U207B            ] }; //⁻−
   key <AE12> { [     equal,       plus,      U2261,      U207A            ] }; //≡⁺
   key <BKSL> { [ backslash,        bar,      U2262,      U221E            ] }; //≢∞
   key <AD03> { [         e,          E,   EuroSign,      U1D452           ] }; //€𝑒
   key <AD05> { [         t,          T,      U03C4,      U2296            ] }; //τ⊖
   key <AD07> { [         u,          U,      U222A,      U2229            ] }; //∪∩
   key <AD09> { [         o,          O,      U2218                        ] }; //∘
   key <AD10> { [         p,          P,      U03C0                        ] }; //π
   key <AD11> { [ bracketleft,  braceleft,    U2260,      U201E            ] }; //≠„
   key <AD12> { [ bracketright, braceright,   U2245,      U201A            ] }; //≅‚
   key <AC01> { [         a,          A,      U2208,      U2209            ] }; //∈∉
   key <AC02> { [         s,          S,      U220B,      U220C            ] }; //∋∌
   key <AC09> { [         l,          L,      UFF62,      UFF63            ] }; //「」
   key <AC10> { [ semicolon,      colon,      U201C,      U201D            ] }; //“”
   key <AC11> { [apostrophe,   quotedbl,  rightsinglequotemark             ] }; //’
   key <AB02> { [         x,          X,      U2284,      U2285            ] }; //⊄ ⊅
   key <AB03> { [         c,          C,      U2282,      U2283            ] }; //⊂ ⊃
   key <AB05> { [         b,          B,      U228E,      U228D            ] }; //⊎⊍
   key <AB06> { [         n,          N,      U269B                        ] }; //⚛
   key <AB08> { [     comma,       less,   guillemotleft, U2264            ] }; //«≤
   key <AB09> { [    period,    greater,  guillemotright, U2265            ] }; //»≥
   key <AB10> { [     slash,   question,   division,      U2216            ] }; //÷∖

   include "level3(ralt_switch)"
};

이 파일은 두 개의 레이아웃을 담고 있어요. 첫 번째는 시프트 레벨이 두 개뿐인 US 키보드의 기본 레이아웃이고, 두 번째는 첫 번째를 포함하면서 두 개의 추가 시프트 레벨을 이용해 일부 키에 여러 유니코드 기호를 더한 거예요. 이 파일의 형식은 여기에 문서화돼 있어요.

다른 키보드라면 첫 번째 레이아웃(basic)을 해당 국가 레이아웃에 맞는 것으로 바꿔야 해요. 보통 이런 레이아웃은 /usr/share/X11/xkb/symbols 디렉터리에 있어요. 그다음 두 번째 레이아웃을 해당 언어 키 레이아웃에 맞게 수정하면 돼요.

기본 디렉터리가 $HOME/.config/xkb라면 이 명령으로 새 설정을 로드해요.

xkbcomp -I$HOME/.config/xkb $HOME/.config/xkb/raku.xkb $DISPLAY

(정의되지 않은 기호에 대한 경고가 나올 수 있어요.)

이 방법은 침습적이지 않지만, 필요할 때마다 설정 파일을 수동으로 로드해야 해요.

시스템 전역 설정

이 방법의 장점은 시스템 파일을 수정하므로 데스크톱 매니저가 제공하는 평범한 인터페이스로 새 레이아웃을 선택할 수 있고 영구적으로 유지된다는 거예요.

단점은 시스템에 루트 접근 권한이 있어야 하고, 시스템 업그레이드가 레이아웃 파일을 덮어쓸 수 있다는 거예요.

시스템 전역 설정을 수정하려면 자기 언어 매핑을 설명하는 특정 파일을 찾아서 앞 섹션에서 본 raku 부분을 추가해야 해요.

새 레이아웃이 시스템 메뉴에 나타나려면 보통 /usr/share/X11/xkb/rules/evdev.xml에 있는 evdev 규칙 파일에 특정 설명을 추가해야 해요. 자기 언어 키보드 레이아웃에 해당하는 섹션을 찾으세요. 예를 들어 us 레이아웃은 이렇게 시작돼요:

  […]
  <layoutList>
    <layout>
      <configItem>
        <name>us</name>
        <!-- Keyboard indicator for English layouts -->
        <shortDescription>en</shortDescription>
        <description>English (US)</description>
        <languageList>
          <iso639Id>eng</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
          […]

새로 정의한 변형을 추가해야 해요:

        <variant>
          <configItem>
            <name>raku</name>
            <description>raku (Raku operators, with AltGr)</description>
            <languageList>
              <iso639Id>eng</iso639Id>
            </languageList>
          </configItem>
        </variant>

로그아웃 후 다시 로그인하면 레이아웃·변형 목록에 새 변형이 나타날 거예요. 또는 이 명령으로 지금 바로 레이아웃을 로드할 수도 있어요:

setxkbmap -layout us -variant raku

이 명령은 us 키보드의 raku 변형을 다시 로드하지만, 불행히도 다중 키보드 사용 환경에서는 다른 키보드 레이아웃을 비활성화해요.

KDE

KDE를 쓴다면 시작 메뉴를 열고 "Autostart"를 입력해 첫 번째 결과인 Autostart를 클릭하세요. 열린 설정 창에서 Add program을 클릭하고 ibus-daemon을 입력한 다음 OK를 클릭해요. 그다음 팝업 창의 Application 탭으로 가서 Command 필드에 위에 보인 전체 ibus-daemon 명령을, --desktop 옵션은 --desktop=plasma로 해서 입력하고 OK를 클릭해요. 이제 다시 로그인하면 자동으로 시작돼요.

두 키 조합으로 유니코드 문자 입력하기

XCompose 입력 방식을 쓰면 유니코드 문자를 간단한 두 키 조합으로 입력할 수 있어요. Raku에서 쓰는 모든 유니코드 문자를 입력할 수 있게 해주는 설정 예시를 보여드릴게요. 이 예시는 두 Super 키를 모두 dead key로 사용해요. 예를 들어 π 기호를 입력하려면 오른쪽 Super(또는 "Windows") 키를 눌렀다 떼고, 그다음 p 키를 눌렀다 떼면 돼요.

<Super_R> <less>               : "«" guillemotleft
<Super_R> <greater>            : "»" guillemotright
<Super_R> <minus>              : "⁻"   U207B
<Super_R> <0>                  : "⁰"   U2070
<Super_R> <1>                  : "¹"   U00B9
<Super_R> <2>                  : "²"   U00B2
<Super_R> <3>                  : "³"   U00B3
<Super_R> <4>                  : "⁴"   U2074
<Super_R> <5>                  : "⁵"   U2075
<Super_R> <6>                  : "⁶"   U2076
<Super_R> <7>                  : "⁷"   U2077
<Super_R> <8>                  : "⁸"   U2078
<Super_R> <9>                  : "⁹"   U2079
<Super_R> <asterisk>           : "×"   U00D7
<Super_R> <slash>              : "÷"   U00F7
<Super_R> <E>                  : "𝑒"   U1D452
<Super_R> <p>                  : "π"   U03C0
<Super_R> <t>                  : "τ"   U03C4
<Super_R> <grave>              : "‘"   U2018
<Super_R> <apostrophe>         : "’"   U2019
<Super_R> <comma>              : "‚"   U201A
<Super_R> <colon>              : "“"   U201C
<Super_R> <quotedbl>           : "”"   U201D
<Super_R> <L>                  : "„"   U201E
<Super_R> <period>             : "…"   U2026
<Super_R> <bracketleft>        : "≡"   U2261
<Super_R> <bracketright>       : "≢"   U2262
<Super_L> <8>                  : "∞"   U221E
<Super_L> <O>                  : "∅"   U2205
<Super_L> <e>                  : "∈"   U2208
<Super_L> <E>                  : "∉"   U2209
<Super_L> <3>                  : "∋"   U220B
<Super_L> <numbersign>         : "∌"   U220C
<Super_L> <minus>              : "−"   U2212
<Super_L> <slash>              : "∖"   U2216
<Super_L> <o>                  : "∘"   U2218
<Super_L> <U>                  : "∩"   U2229
<Super_L> <u>                  : "∪"   U222A
<Super_L> <asciitilde>         : "≅"   U2245
<Super_L> <equal>              : "≠"   U2260
<Super_L> <less>               : "≤"   U2264
<Super_L> <greater>            : "≥"   U2265
<Super_L> <c>                  : "⊂"   U2283
<Super_L> <C>                  : "⊃"   U2283
<Super_L> <v>                  : "⊄"   U2284
<Super_L> <V>                  : "⊅"   U2285
<Super_R> <d>                  : "⊆"   U2286
<Super_R> <D>                  : "⊇"   U2287
<Super_R> <f>                  : "⊈"   U2288
<Super_R> <F>                  : "⊉"   U2289
<Super_R> <U>                  : "⊍"   U228D
<Super_R> <u>                  : "⊎"   U228E
<Super_L> <t>                  : "⊖"   U2296
<Super_L> <L>                  : "「"   UFF62
<Super_L> <l>                  : "」"   UFF63

이 줄들을 ~/.XCompose 파일에 추가하면 돼요. 변경을 활성화하려면 X 세션을 나갔다가 다시 로그인해야 해요. Ubuntu Gnome은 Super 키 하나를 자기 용도로 쓰기 때문에 Super_* 키 중 하나(또는 둘 다)를 예를 들어 Meta_R로 바꾸고 싶을 수도 있어요.

WinCompose (Windows)

WinCompose는 Windows에 compose 키 기능을 추가해요. GitHub의 WinCompose releases 페이지나 Chocolatey 패키지 매니저로 설치할 수 있어요.

설치해서 실행하면 트레이 아이콘을 우클릭해 Options → Composing → Behavior → Compose Key를 선택해 원하는 키를 설정하세요.

WinCompose는 Options → Composing → Sequences에서 고를 수 있는 소스가 여러 개예요. XCompose를 켜고 Xorg를 끄는 걸 권장하는데, Xorg가 시퀀스를 제공하지 않는 연산자가 몇 개 있고 Xorg에는 XCompose의 연산자 시퀀스와 충돌하는 시퀀스도 있기 때문이에요. 시퀀스는 트레이 아이콘을 우클릭하고 Show Sequences를 선택하면 볼 수 있어요. 직접 시퀀스를 추가하려면 %USERPROFILE%.XCompose를 추가/수정하거나 옵션 메뉴에서 사용자 정의 시퀀스를 편집하면 돼요.

터미널, 셸, 편집기

XTerm

XTerm에서 유니코드 지원은 주로 ~/.Xdefaultsutf8utf8Fonts 옵션을 1로, locale 옵션을 UTF-8로 설정해서 활성화해요. Raku 프로그래밍에 충분한 유니코드 표시를 지원하는 설정 예시예요:

XTerm*faceName:           xft:Noto Mono:style=Regular
XTerm*faceNameDoublesize: xft:Noto Emoji:style=Regular
XTerm*faceSize:           10
XTerm*locale:             UTF-8
XTerm*titleModes:         16
XTerm*utf8:               1
XTerm*utf8Fonts:          1
XTerm*utf8Title:          true

URxvt

XTerm과 비슷하게, URxvt의 유니코드 지원은 주로 ~/.Xdefaultslocale 옵션을 en_US.UTF-8로 설정해서 활성화해요. Raku 프로그래밍에 충분한 유니코드 표시를 지원하는 설정 예시예요:

URxvt*font:              xft:Noto Mono:pixelsize=14:style=Regular,\
                         xft:Noto Emoji:pixelsize=14:style=Regular
URxvt*letterSpace:       -1
URxvt*locale:            en_US.UTF-8
URxvt*skipBuiltInGlyphs: true

Unix 셸

bash 셸에서 유니코드 문자는 Ctrl-Shift-u를 누른 다음 유니코드 코드포인트 값을 입력하고 Enter를 눌러 입력해요. 예를 들어 원소-연산자(∈) 문자를 입력하려면 다음 키 조합을 써요(명확성을 위해 공백을 넣었어요):

Ctrl-Shift-u 2208 Enter

Unix 셸에서 raku REPL을 시작했다면 REPL에 유니코드 문자를 입력할 때도 이 방법을 그대로 써요.

Screen

GNU Screen은 digraph 명령이 있지만 digraph 테이블이 꽤 제한적이에요. bindkeyexec 덕분에 외부 프로그램으로 현재 screen 창에 문자를 넣을 수 있어요.

bindkey ^K exec .! digraphs

이것은 control-k를 셸 명령 digraphs에 묶어요. RFC 1345보다 Raku 친화적인 digraph 테이블을 원한다면 digraphs를 쓰거나 자기 필요에 맞게 바꾸면 돼요.

Vim

Vim에서는 (삽입 모드에서) 먼저 Ctrl-V(또는 ^V)를 누르고, 그다음 u, 그다음 입력할 유니코드 문자의 16진 값을 눌러 유니코드 문자를 입력해요. 예를 들어 그리스 문자 λ(lambda)는 이 키 조합으로 입력돼요:

^Vu03BB

Ctrl-K/^K와 digraph를 함께 써서 일부 문자를 입력할 수도 있어요. digraph로 위와 같은 결과를 내는 대안은 이렇게 생겼어요:

^Kl*

Vim이 제공하는 digraph 목록은 여기에 문서화돼 있고, :digraph 명령으로 직접 추가할 수 있어요.

Vim에서 특수 문자 입력에 대한 자세한 내용은 Vim Wikia의 특수 문자 입력 페이지를 참고하세요.

vim-raku

Vim의 vim-raku 플러그인은 ASCII 기반 연산자를 유니코드 기반 등가물로 선택적으로 바꾸도록 설정할 수 있어요. 입력하는 동안 ASCII 기반 연산자를 즉석에서 변환해줘요.

Emacs

Emacs에서 유니코드 문자는 먼저 C-x 8 RET 코드를 입력해요. 그러면 미니버퍼에 Unicode (name or hex):라는 텍스트가 나타나요. 그다음 유니코드 코드포인트 16진수를 입력하고 Enter를 누르면 해당 유니코드 문자가 문서에 나타나요. 그리스 문자 λ(lambda)를 입력하려면 이 키 조합을 써요:

C-x 8 RET 3bb RET

유니코드와 Emacs 입력에 대한 자세한 내용은 Unicode Encoding Emacs 위키 페이지를 참고하세요.

RFC 1345 문자 니모닉도 사용할 수 있어요:

C-x RET C-\ rfc1345 RET

또는 C-u C-\ rfc1345 RET.

특수 문자를 입력하려면 & 다음에 니모닉을 입력해요. Emacs는 에코 영역에 입력 가능한 문자를 보여줘요. 예를 들어 그리스 문자 λ(lambda):

&l*

C-\로 입력 방식을 토글할 수 있어요.

특수 문자를 넣는 또 다른 입력 방식은 TeX예요. C-u C-\ TeX RET로 선택하세요. \ 같은 접두어로 특수 문자를 입력할 수 있어요. 예를 들어 λ를 입력하려면:

\lambda

입력 방식이 제공하는 문자·시퀀스를 보려면 describe-input-method 명령을 실행하세요:

C-h I TeX

Raku에서 유용한 문자들

스마트 따옴표 (Smart quotes)

이 문자들은 여러 언어에서 따옴표로 쓰여요. Raku에서는 따옴표 문자로 쓰여요.

이제 이런 구성도 가능해요:

say 「What?!」;
say ”Whoa!“;
say „This works too!”;
say „There are just too many ways“;
say “here: “no problem” at all!”; # 중첩할 수 있어요!

이건 셸에서 특히 유용한데:

raku -e 'say ‘hello world’'

따옴표를 신경 쓸 필요 없이 코드 조각을 복사·붙여넣기할 수 있기 때문이에요.

Guillemets

이 문자들은 프랑스어와 독일어에서 따옴표로 쓰여요. Raku에서는 삽입 단어 따옴표(interpolation word quotes), 하이퍼 연산자, POD6에서 꺾쇠 대안으로 쓰여요.

기호 유니코드 코드포인트 ascii 대응
« U+00AB <<
» U+00BB >>

이런 구성이 가능해요:

say (1, 2) »+« (3, 4);     # OUTPUT: «(4 6)␤» - 요소별 덧셈
[1, 2, 3] »+=» 42;         # @array의 각 요소에 42를 더함
say «moo»;                 # OUTPUT: «moo␤»

my $baa = "foo bar";
say «$baa $baa ber».raku;  # OUTPUT: «("foo", "bar", "foo", "bar", "ber")␤»

집합/가방 연산자 (Set/bag operators)

집합/가방 연산자들은 모두 집합론 관련 기호를 사용해요. 유니코드 코드포인트와 ASCII 대응은 아래 목록과 같아요. 이런 문자를 입력하려면 문자 조합 코드(예: Vim의 Ctrl-V u, Bash의 Ctrl-Shift-u)를 입력한 다음 유니코드 코드포인트 16진수를 입력하면 돼요.

연산자 유니코드 코드포인트 ascii 대응
U+2208 (elem)
U+2209 !(elem)
U+220B (cont)
U+220C !(cont)
U+2261 (==)
U+2262 !(==)
U+2286 (<=)
U+2288 !(<=)
U+2282 (<)
U+2284 !(<)
U+2287 (>=)
U+2289 !(>=)
U+2283 (>)
U+2285 !(>)
U+222A (|)
U+2229 (&)
U+2216 (-)
U+2296 (^)
U+228D (.)
U+228E (+)

수학 기호

위키백과에 유니코드 수학 연산자·기호의 전체 목록과 수학적 의미 링크가 있어요.

그리스 문자

그리스 문자를 변수 이름으로 쓸 수 있어요. 그리스·콥트 문자의 목록과 코드포인트는 위키백과의 Greek in Unicode 문서를 참고하세요.

예를 들어 에 3을 할당하려면 Vim에서 이렇게 입력해요(명확성을 위해 compose 시퀀스 사이에 공백을 넣었어요):

my $«Ctrl-V u 03C0» = 3;  # same as: my $π = 3;
say $«Ctrl-V u 03C0»;     # same as: say $π;

위첨자와 아래첨자

U+207x, U+208x, (드물게) U+209x 범위를 쓰면 제한된 위첨자·아래첨자를 유니코드로 직접 만들 수 있어요. 다만 제곱(2승)이나 세제곱(3승) 값을 만들려면 이들이 Latin1 보충 유니코드 블록에 정의돼 있으므로 U+00B2U+00B3를 써야 해요.

그래서 exp(x)를 0 주위로 테일러 급수 전개한 식을 쓸 때, 예를 들어 vim에 이렇게 입력해요:

exp(x) = 1 + x + x«Ctrl-V u 00B2»/2! + x«Ctrl-V u 00B3»/3!
+ ... + x«Ctrl-V u 207F»/n!
# which would appear as
exp(x) = 1 + x + x²/2! + x³/3! + ... + xⁿ/n!

또는 1부터 k까지의 목록 요소를 지정하려면:

A«Ctrl-V u 2081», A«Ctrl-V u 2082», ..., A«Ctrl-V u 2096»
# which would appear as
A₁, A₂, ..., Aₖ

폰트 문제 (Font issues)

일부 배포판에는 모든 유니코드 글리프를 포함하지 않은 폰트가 들어 있어요. 일부 글리프 표시에 문제가 있다면 GNU Unifont 같은 폰트를 설치해야 할 수 있어요.