Emacs 한글 인쇄 문제

bman25의 이미지

안녕하세요.

질문에 앞서 잡담을 좀 하자면, 저는 문과 계열 전공자로 역시 IT 쪽과는 전혀 관계없는 분야에서 15년 넘게 일해오고 있습니다. 대학 시절 취미 삼아 프로그래밍 과목을 수강하면서 질문을 올리려고 KLDP에 가입했었는데, 계정 정보를 보니 벌써 17년 10개월이 되었다고 나오네요. 시간이 정말 빠른 것 같습니다.

본론으로 들어가면, 최근 비교적 많은 양의 텍스트를 지속적으로 다뤄야 하는 일을 새로이 시작했습니다. (뭔가 기술적으로 텍스트를 처리한다는 의미가 아니라, 그냥 단순히 텍스트를 입력하고 수정하는 일이 많다는 의미입니다;;) 그리고, 그 도구로서 Emacs를 써보고 싶다는 생각이 들었습니다. (예전부터 관심이 많아서 몇번 시도해봤지만 끝내 성공하지 못한 경험이 있습니다.) 관련 업계 분들 조차 어렵게 느끼시는 Emacs의 고급 기능들이 필요한 것은 전혀 아닙니다. 기본적인 기능만으로도 충분한 저에게 Emacs는 좀 과한 것처럼 느껴지긴 하지만, 그래도 그냥 아무 이유 없이 끌리는 건 어쩔 수가 없네요.

설치를 하고 인터넷 뒤져가면서 이것 저것 설정을 했습니다. (Windows 10 환경입니다.) 기본적인 기능을 위한 설정조차 저에게는 쉽지 않은 일이었지만 나름 재미를 느끼면서 진행했습니다. 그리고... 결국 도저히 해결할 수 없는 문제에 봉착했습니다. 바로 프린터 한글 인쇄 문제입니다. 일단, 화면 상에서는 영어나 한글 모두 잘 표시됩니다. 그런데 인쇄를 하면, 영어는 문제없이 출력되지만, 한글은 어떤 방법을 써도 깨져서 출력이 됩니다. 이 문제 하나를 해결하기 위해 3일 정도 인터넷을 뒤졌지만 끝내 실패했습니다. 제 검색 능력의 한계일 수도 있고, 아니면 답을 찾고도 지식의 한계 때문에 이해를 못하고 넘어갔을 수도 있을 것 같네요.

인쇄물 출력은 제가 생각하는 기본적인 기능에 포함되기 때문에, 이 문제를 꼭 해결하고 싶습니다. 참고하실 수 있도록 .emacs 파일을 첨부합니다. 부디 많은 도움 부탁드립니다.

감사합니다.

PS: 공식 홈페이지에서 다운로드한 exe 인스톨러 버젼을 설치했고, 그 외 부가적인 요소 전혀 설치하지 않은 순수한 상태에서 설정 파일에 아래 내용만 추가했습니다.

;; Set Frame Size & Position
(set-frame-width (selected-frame) 100)
(set-frame-height (selected-frame) 30)
(set-frame-position (selected-frame) 15 15)
 
;; Disable Fringe
(fringe-mode 0)
 
;; Disable Toolbar
(tool-bar-mode -1) 
 
;; Disable Startup Screen
(setq inhibit-startup-screen t)
 
;; Set Initial Mode
(setq initial-major-mode 'text-mode)
(setq initial-scratch-message nil)
 
;; Set Default Directory
(setq default-directory "C:/DS/")
 
;; Disable Backup & Autosave
(setq make-backup-files nil)
(setq auto-save-default nil)
 
;; Set Screen Language
(set-language-environment "Korean")
 
;; Set Screen Encoding
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-file-name-coding-system 'cp949-dos)
 
;; Set Screen Font
(set-face-font 'default (font-spec :family "D2Coding" :size 18))
 
;; Enable Screen Word Wrap
(setq-default word-wrap t)
 
;; Set Printer
(setq printer-name "//DS-LAPTOP-WORK/DS-PRINTER-WORK")
(setq ps-printer-name "//DS-LAPTOP-WORK/DS-PRINTER-WORK")
(setq ps-paper-type 'a4)
(setq ps-font-size 12)
(setq ps-print-header nil)
 
;; Set Printer Language (NOT WORKING)
;; (load "ps-print")
;; (load "ps-mule")
;; (load "ps-bdf")
;; (load "C:/Program Files/Emacs/x86_64/share/emacs/27.2/lisp/leim/quail/hangul.el")
;; (setq ps-multibyte-buffer 'bdf-font-except-latin)
;; OR (setq-default ps-multibyte-buffer 'non-latin-printer)
Prentice의 이미지

안녕하세요, 인쇄 명령이 여러 가지인 것 같던데 인쇄 명령은 어떤 것을 어떻게 사용하고 계실까요?

BDF 폰트/Intlfonts는 따로 설치되어 있나요? 설치되어 있다면 설치 위치는 어떻게 되나요?

(저는 답을 모르지만 다른 분들이 답변 주실 때 도움이 될 듯합니다.)

bman25의 이미지

댓글 감사합니다.

인쇄 명령 : print-buffer의 경우 한글이 깨질 뿐만 아니라, wrap 기능이 적용되지 않아서 긴 문장이 전부 잘리는 문제가 있었습니다. 그래서 ps-print-buffer를 사용하는데, wrap은 적용이 되지만 위에 말씀드린 것처럼 한글 문제는 여전히 해결되지 않았습니다.

폰트 : 공식 홈페이지에서 프로그램을 다운 받아 설치한 것 외에 아무것도 추가로 설치하지 않았습니다. 폰트는 기본적으로 포함되어 있는 줄 알았는데 그게 아니었나보네요. 혹시 말씀하신 폰트는 어디서 받고 어떻게 설치하는지 알 수 있을까요?

감사합니다.

: Who do you think I am?

bman25의 이미지

말씀해주신 내용을 힌트 삼아 계속 검색을 한 결과, bdf 폰트를 설치하고 아래와 같이 설정한 이후 한글 출력에 성공했습니다! 그런데... 이번에는 인쇄물에 wrap이 적용되지 않아서 출력 내용이 잘리는 문제가 생겼네요;; 이 부분도 좀 더 검색을 해봐야겠습니다. 어쨌든 진전이 생길 수 있도록 도와주셔서 감사합니다.

;; Set Printer Language & Font (GNU Intlfonts needed)
(require 'ps-print)
(require 'ps-mule)
(require 'ps-bdf)
(setq bdf-directory-list
      '("C:/GNU Intlfonts/Asian" "C:/GNU Intlfonts/Chinese"
	"C:/GNU Intlfonts/Chinese.X" "C:/GNU Intlfonts/Chinese.BIG"
	"C:/GNU Intlfonts/Ethiopic" "C:/GNU Intlfonts/European"
	"C:/GNU Intlfonts/European.BIG" "C:/GNU Intlfonts/Japanese"
	"C:/GNU Intlfonts/Japanese.X" "C:/GNU Intlfonts/Japanese.BIG"
	"C:/GNU Intlfonts/Korean.X" "C:/GNU Intlfonts/Misc"))
(setq ps-multibyte-buffer 'bdf-font)

: Who do you think I am?

bman25의 이미지

앞서 적은 바와 같이 Wrap은 안되더라도 일단 한글 출력까지는 됐었는데... 그 이후로 갑자기 프린터에서 오류가 나면서 출력이 안됩니다. (화면 상에서는 오류 없이 Done 이라고 나오는데 프린터 자체의 조작 화면에 오류가 뜨네요. 참고로, Emacs 이외의 다른 프로그램들은 문제 없이 인쇄가 됩니다.) 뭔가 수정을 해서 오류가 생겼다면 이전 설정으로 돌아가면 되는데, (최소한 제가 기억하기에는) 수정한 부분도 없이 갑자기 오류가 생기니 당황스럽네요.

여러가지로 테스트를 해본 결과, 한글을 적으면 프린터 조작 화면에 오류가 뜨면서 인쇄가 안되지만, 한글이 없으면 출력이 잘 되는 걸 확인했습니다. 황당한 것은, 이전에 한글 출력이 됐을때는 wrap이 적용되지 않아 문장이 잘려서 출려됐는데, 이제는 한글이 안되는 대신에 Wrap이 적용돼서 정상적으로 출력됩니다.

요약하면 이런 상황입니다:

위 설정으로 한글 출력 성공했으나 Wrap 적용 안됨
-> 설정을 바꾼게 없는데 갑자기 프린터 오류 발생
-> 테스트 해보니, 한글이 다시 안되는 대신에 Wrap은 적용됨

보다 근본적인 의문점이 생기는데, 간단한 텍스트 파일 인쇄가 정말 이렇게까지 복잡한거 맞나요? 다른 분들도 이렇게 하고 계신건가요? 아니면 다른 방법이 있는데 제가 몰라서 이런 삽질을 하고 있는 것은 아닌지... 어쨌든 아시는 분들 도움 부탁드립니다.

: Who do you think I am?

bman25의 이미지

상당히 긴 시간 동안 여러가지 시도를 해봤지만, 결국 해결책은 찾지 못했습니다. Emacs의 역사와 사용자층을 고려하면 해결책이 없을 리 없겠지만, 제 능력으로는 불가능한 것 같습니다.

그래도 일단은 계속 Emacs를 사용하면서 공부를 해나갈 생각이고, 그러다 보면 언젠가는 답을 찾을 수 있지 않을까 합니다. (당장은 Emacs를 사용하더라도 인쇄 부분은 LibreOffice 등 다른 소프트웨어를 사용해야겠죠;;)

감사합니다.

: Who do you think I am?

bman25의 이미지

끝내 미련을 버리지 못해서 아직도 시도 중입니다.

최근, Emacs에서 공란이 포함된 디렉토리명을 인식하는데 문제가 있을 수 있다는 얘기를 들어서, BDF 폰트가 설치된 디렉토리명을 변경하고 아래와 같이 .emacs 파일을 수정했습니다.

(require 'ps-print)
(require 'ps-mule)
(require 'ps-bdf)
(setq bdf-directory-list
      '("C:/GNU/Intlfonts/Asian" "C:/GNU/Intlfonts/Chinese"
      "C:/GNU/Intlfonts/Chinese.BIG" "C:/GNU/Intlfonts/Chinese.X"
      "C:/GNU/Intlfonts/Ethiopic" "C:/GNU/Intlfonts/European"
      "C:/GNU/Intlfonts/European.BIG" "C:/GNU/Intlfonts/Japanese"
      "C:/GNU/Intlfonts/Japanese.BIG" "C:/GNU/Intlfonts/Japanese.X"
      "C:/GNU/Intlfonts/Korean.X" "C:/GNU/Intlfonts/Misc"))
(setq ps-multibyte-buffer 'bdf-font)

그랬더니 정말 한글 출력이 됐습니다! (앞서 제가 설정을 전혀 바꾸지 않았음에도 갑자기 안된다고 말씀드렸었는데, 기억은 안나지만 아마도 디렉토리명을 바꿨었나 봅니다.) 그런데, 기쁨도 잠시... 다른 문제가 발견되었습니다.

몇개의 다른 파일로 테스트를 해봤는데, 처음 테스트 했던 파일은 문제 없이 출력이 되는 반면, 다른 파일은 이전과 마찬가지로 프린터에서 에러음이 나오면서 출력이 안됩니다. 둘 다 한글과 영어가 섞여 있는 내용이고, 특별한 포맷이 아니라 그냥 plain text일 뿐입니다. 도대체 왜 어떤건 되고 어떤건 안되는지 모르겠네요...

드디어 해결한 줄 알고 너무 기뻤는데, 다시 우울해졌습니다. 더 조사를 해봐야겠습니다.

PS: 여기에 질문을 하지는 않았었지만, 스펠 체크 기능과 관련해서도 어려움을 겪고 있었는데, 이건 해결했습니다. Cygwin을 통해 Aspell을 설치하니까 드디어 되네요. 역시 Emacs는 하나 하나 배워나가는 재미가 있는 것 같습니다.

: Who do you think I am?

Prentice의 이미지

안녕하세요, 완전 해결은 아닐지라도 성공 축하드립니다!

가능성은 낮겠지만 혹시 처음 테스트하신 파일과 나중에 테스트하신 파일 모두 형식은 동일한가요? 인코딩 종류나 앞에 BOM이 붙어있는지 여부 등등까지도요. (Windows에서 작업 중이시면 주로 cp949 vs. UTF-8 등의 차이가 예상 가능하겠습니다.)

아니면 처음 테스트하신 파일을 열어서 나중에 테스트하신 파일 내용을 첨부하고 인쇄하셨을 때는 괜찮다거나요.

bman25의 이미지

이전 테스트 파일들은 지웠기 때문에 당시의 인코딩은 알 방법이 없으나, 테스트 과정에서 이해할 수 없는 현상을 발견했습니다.

- 몇 개의 파일들을 확인해보니, 인코딩이 다르다는 점을 확인했습니다. (모든 파일들은 본문에 적은 것처럼 .emacs 파일에서 인코딩을 utf-8로 설정한 이후에 작성했는데, 왜 다른 인코딩으로 저장된 파일들이 존재하는지는 또다른 의문입니다.) 문제는, 여러 다른 인코딩에 대해서 출력을 시도해도 모두 에러가 난다는 점입니다. 즉, 인코딩은 직접적으로 연관이 없지 않나 생각됩니다.

- 그리고, 테스트 과정에서 인코딩이 아닌 다른 요인을 발견했습니다. 그런데 그 요인이라는 것이... 정말 이상합니다. 한글 텍스트가 적으면 에러 없이 출력이 되고, 한글 텍스트가 많으면 에러가 발생합니다;; 많고 적음의 기준은 모르겠습니다. 예를 들어, 여러 문단의 한글 텍스트가 있으면 출력 중 에러가 발생하는데, 동일한 파일에서 한글 부분을 몇 단어만 남겨놓고 지우면 또 출력이 됩니다. (다 지운 것이 아니라 분명히 소량이지만 한글 텍스트가 남아있어도 출력이 됩니다.) 물론 그 과정에서 설정을 바꾼 것은 전혀 없습니다.

제 설명이 좀 두서 없지만, 뭔가 짚이는 부분이 있으시다면 조언 부탁드립니다.
감사합니다.

: Who do you think I am?

Prentice의 이미지

혹시 한자의 경우에도 동일한 현상이 발생하나요?

혹시 러시아어의 경우에도 동일한 현상이 발생하나요?

혹시 러시아어에서는 좀 문제가 덜한가요? (좀 더 많이 써도 괜찮은 편인가요?)

그렇다면 UTF-8 처리 관련 버그가 어디 있는 것으로, 글자 하나가 1 byte보다 클 때 (한글·한자는 3바이트, 러시아어는 2바이트) 문제가 발생하는 것으로 짐작해볼 수 있겠습니다.

러시아어는 괜찮다면 그럼 저도 당장 짐작가는 것은 없습니다만 그 외 다른 버그일 가능성도 있어 보입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.