Dork's port

Python에서 matplotlib이용 시 font type 변경하기 본문

Develop

Python에서 matplotlib이용 시 font type 변경하기

Dork94 2019. 5. 16. 20:53

PDF에는 font type이 존재한다.

 

몰랐지만, 존재하더라.

 

그래서 그에 관련된 내용은 아래 링크에서 찾아볼 수 있다.

 

2019/05/16 - [Paper] - PDF Font type이란?

 

PDF Font type이란?

논문을 작업하던 도중 PDF Type이 3로 되어있어, 1로 바꾸라는 피드백이 왔다(Python matplotlib를 사용하였는데, 기본적으로 Type3로 저장된다). 무슨말인지 몰라서 찾아보았다. PDF에는 Font가 들어가는데, 이 F..

blog.dork94.com

2019/05/16 - [Mac OS] - Mac OS(OSX)에서 pdf의 font type확인하기.

 

Mac OS(OSX)에서 pdf의 font type확인하기.

$ brew install poppler 먼저 위의 명령어로 poppler를 설치한다. 그런 후 명령어를 이용해 봐주면 된다 $ pdffonts name_of_pdf.pdf Ref: https://stackoverflow.com/questions/32420994/os-x-pdf-get-font-infor..

blog.dork94.com

 

그래서 지금은 Python에서 어떻게 font type을 변경하는지에 대해 알아보려고 한다.

 

기본적으로 python matplotlib를 이용하면, type 3를 사용하는데, 이게 논문 작성시에는 문제가 될 수 있다.

 

나도그랬고..

 

그래서 바꾸는 방법을 알아보려한다.

 

font type에 대해서는 이전글에서 간단하게 설명하고 있으므로 바로 코드로 가보자.

 

  # TrueType 

 

import matplotlib.pyplot as plt
	
    plt.rcParams['pdf.fonttype'] = 42 # TrueType
    plt.rcParams['ps.fonttype'] = 42 

 

위와 같이 설정하면 savefig로 저장시에 기본적으로 type 3으로 적용된 폰트를 TrueType으로 바꿀 수 있다.

 

다만, 나의 경우 type 1을 이용해야 했는데, 아래와 같이 코드를 작성해봤다.

 

import matplotlib.pyplot as plt
	
    plt.rcParams['pdf.fonttype'] = 1 
    plt.rcParams['ps.fonttype'] = 1

 

그러나 결과로는 아래와 같은 에러가 발생했다.

 

ValueError: Key pdf.fonttype: Supported Postscript/PDF font types are [3, 42]

 

그래서 소스코드를 보니 아래내용을 포함하고 있었는데, 해석하자면 위의 옵션으로는 3과 42밖에 사용하지 못했다.

 

def validate_fonttype(s):
    """
    confirm that this is a Postscript of PDF font type that we know how to
    convert to
    """
    fonttypes = {'type3':    3,
                 'truetype': 42}
    try:
        fonttype = validate_int(s)
    except ValueError:
        try:
            return fonttypes[s.lower()]
        except KeyError:
            raise ValueError(
                'Supported Postscript/PDF font types are %s' % list(fonttypes))
    else:
        if fonttype not in fonttypes.values():
            raise ValueError(
                'Supported Postscript/PDF font types are %s' %
                list(fonttypes.values()))
        return fonttype

 

그래서 Type 1을 사용하기 위해 구글링 한 결과 아래와 같이 설정하면  type 1으로 Save 할 수 있다.

 

  # Type 1 

 

import matplotlib.pyplot as plt

	plt.rcParams['ps.useafm'] = True
	plt.rcParams['pdf.use14corefonts'] = True
	plt.rcParams['text.usetex'] = True

 

그리고 실행해서 정상적으로 저장이 되었다면 Type 1으로 저장이 되었을 것이다(확인 방법은 위에 링크에 나와있음).

 

그러나 나의 경우(MacOS Mojave) 아래의 에러가 발생하였다.

 

 

 

FileNotFoundError: [Errno 2] No such file or directory: 'latex': 'latex'.

 

알고보니 latex 프로그램을 이용해서 convert를 진행하는 것 같았다(아마 text.usetex 옵션이 그에 해당하는 옵션이라고 생각).

 

그래서 latex가 python package인 줄알고 다운을 받았더니, 그게 아니라 latex 응용프로그램(application)을 이용하는 것 이었고, Mac의 경우 아래 명령어로 다운로드 가능하다.

 

$ brew cask install mactex 

 

그리고 설치가 완료되면, 자동적으로 path를 지정해줘서 문제가 없어야 하지만 나의 경우 다른 에러가 발생했다.

 

 

FileNotFoundError: [Errno 2] No such file or directory: 'kpsewhich' 

 

위의 파일은 원래 latex에 포함되어야 하는 파일이다. 확인해 보니 install은 제대로 되었는데 path가 제대로 설정되지 않아 생기는 오류였다.

 

그래서 아래와 같은 방법을 통해 path를 찾고, path에 등록해주었다.

 

$ sudo find / -name "kpsewhich"

그러면 어떤 경로가 뜰텐데, 나의 경우 /usr/local/texlive/2019/bin/x86_64-darwin/kpsewhich 이었다(지금확인해 보니 왜인진 몰라도 기본 path가 /Library/TeX/texbin/kpsewhich 로 설정되어있으며 여기에도 존재한다).

 

그래서 PATH를 추가해주기 위해 아래처럼 명령어를 사용해 준다.

 

※ 재부팅시에도 영구적으로 적용하고 싶다면 ~/.bash_profile 파일의 마지막에 아래 내용을 추가하자.

 

$ PATH="/usr/local/texlive/2019/bin/x86_64-darwin/kpsewhich :${PATH}"
$ export PATH

 

 

그리고 실행하면 정상적으로 될 것 이다! 

 

ㅋㅋ!

 

Ref : http://phyletica.org/matplotlib-fonts/

http://nerdjusttyped.blogspot.com/2010/07/type-1-fonts-and-matplotlib-figures.html

 

Comments