PythonTex로 다이어그램을 생성하고 Grid 출력

개요



PythonTex를 사용하면 tex 문서에 파이썬 코드를 포함시킬 수 있습니다. 여기에서는 tex 문서중에서 그림의 작성과 그 표시·출력을 실시합니다.
특히 그림을 연속 출력하고 싶은 경우에 PythonTex가 그 실력을 발휘하기 때문에,
여러 그림을 만들고 그리드로 표시합니다.

이미지의 Grid 표시



이번에는 자동으로 출력한 그림을 grid로 표시하기 위해 minipage 환경을 이용합니다. PythonTex 를 사용하지 않고, 어리석게 쓰면 다음과 같은 코드입니다.
많은 그림을 출력 할 때 매우 귀찮습니다 ...
\begin{figure}[ht]
  \begin{minipage}[ht]{0.48\textwidth} 
    \centering 
    \includegraphics[width= 6 cm]{sin.png} 
    \caption{sin curve} 
    \label{sin} 
   \end{minipage} 
   \hfill
 \begin{minipage}[ht]{0.48\textwidth} 
...
 \end{minipage} 
\end{figure}

실행 코드



특별한 것으로 pythontex를 지정합니다.
PythonTex의 환경 구축은 이 기사 가 참고가 됩니다.
pycode 환경에 python 의 코드를 포함,\py{} 로 호출하여 tex 문서 중에 생성한 tex 코드를 출력시킵니다.
\documentclass{article}
\usepackage[dvipdfmx]{graphicx}
\usepackage{mediabb}
\usepackage{pythontex}
\begin{document}

\begin{pycode}
import matplotlib.pyplot as plt
import numpy as np

## 図の作成
def draw_func(x, y, name):
  plt.figure(figsize=(10, 7))
  plt.plot(x, y)
  plt.savefig('{}.png'.format(name))

def sin():
  x = np.arange(-3, 3, 0.01)
  y = np.sin(x)
  draw_func(x, y, 'sin')

def cos():
  x = np.arange(-3, 3, 0.01)
  y = np.cos(x)
  draw_func(x, y, 'cos')

def exp():
  x = np.arange(-3, 3, 0.01)
  y = np.exp(x)
  draw_func(x, y, 'exp')

def square():
  x = np.arange(-3, 3, 0.01)
  y = np.square(x)
  draw_func(x, y, 'square')

# ファイル名、caption, labelの指定
images = [ \
  ('sin.png', 'sin curve', 'sin'), \
  ('cos.png', 'cos curve', 'cos'), \
  ('exp.png', 'exp curve', 'exp'), \
  ('square.png', 'square curve', 'square'), \
  ]

def insert_grid_images(): # 2*N grid
  # 図の生成
  sin()
  cos()
  exp()
  square()

 # Gridで表示するためにfigure環境にminipageを作る
  head = r"\begin{figure}[ht]"
 
 # 反復部分
  content = ""
  for i in images:
    tmp = r"\
    \begin{minipage}[ht]{0.48\textwidth} \
      \centering \
      \includegraphics[width= 6 cm]{FILENAME} \
      \caption{CAPTION} \
      \label{LABEL} \
    \end{minipage} \
    \hfill"
    property = {
      "FILENAME" : i[0],
      "CAPTION" : i[1],
      "LABEL" : i[2],  
    }
    # ファイル名、caption, labelを置換
    for key, value in property.items():
      tmp = tmp.replace(key, value)

    content += tmp

  foot = r"\end{figure}"

 # 生成した文字列を返す
  return head+content+foot
\end{pycode}  


sin curve(Figure \ref{sin}), % 引用も可能
cos curve(Figure \ref{cos}), 
exp curve(Figure \ref{exp}), 
square curve(Figure \ref{square})

% ここでinsert_grid_images()を実行し、texのコードを出力する
\py{insert_grid_images()}


\end{document}


완성도



생성 된 다이어그램이 올바르게 grid로 표시됩니다. tex 본문에서의 인용도 잘되고 있습니다.



참고



Tex Wiki PythonTex
TECH ACADEMY Python에서 여러 위치의 문자열을 바꾸는 방법

자원



이 리포지토리에는 실행 코드가 있습니다.

좋은 웹페이지 즐겨찾기