tikz pgf

여러 페이지에 걸쳐 사진 나누기

저는 여러 페이지에 걸쳐 있을 수 있는 타임라인을 생성하기 위해 새로운 패키지를 작성하려고 하는 상대적인 TeX 초보자입니다(기존 타임라인 솔루션은 저에게 적합하지 않으며 '환불'의 방법으로 커뮤니티와 공유할 수 있는 우수한 것을 작성하고 싶습니다. ').

\begin{picture}...\end{picture} 기능( tikz 없음) 만을 사용하여 아주 멋진 타임라인을 성공적으로 조롱할 수 있었습니다 .

문제는 페이지를 확장하는 것입니다. 여러 페이지의 수평 또는 수직 확장을 지원하기 위해 TeX가 특정 지점에서 자동으로 그림을 나누도록 할 수 있습니까?


불행히도 이것은 작동하지 않습니다. 그림 환경( picture , tikzpicture , ...)은 그 자체로 (수평) 상자이며 LaTeX는 이를 깨뜨리지 않습니다. 이 작업은 직접 수행해야 합니다.

사진이 너무 길어서 감지할 수 있다면(최대 \textheight 보다 길거나 현재 페이지의 나머지 부분을 계산 ) <global save settings>\end{picture}\begin{picture}<restore settings> 와 같은 코드를 삽입할 수 있습니다 . <설정 복원> 현재 사진을 닫고 새 사진을 엽니다. 색상과 스타일을 변경하기 위해 새 경로를 시작해야 하지만 특정 설정과 위치를 유지하려는 tikz-timing 에서 TikZ의 \path 로 비슷한 작업을 수행합니다.그러나 특히 전체 사진의 경우 약간 까다롭습니다.

또 다른 가능성은 전체 그림을 그리는 것이지만 저장 상자 안에 있는 것입니다. 즉, 먼저 저장하지만 직접 조판하지는 않습니다. 그런 다음 높이( \ht\yourboxmacro )를 측정할 수 있으며 너무 높으면 내 adjustbox 패키지를 사용하여 자를 수 있습니다. 아이디어는 그것을 두 번 삽입하는 것입니다. 한 번은 첫 번째 페이지의 크기로 자른 다음 첫 번째 부분이 잘린 다음 페이지에 다시 삽입합니다. 물론 루프를 사용하면 두 페이지 이상을 지원할 수 있습니다.

여기에 몇 가지 예제 코드가 있습니다. 여기에서 tikzpicture 의 구문을 알고 있지만 picture 의 구문을 잘 알지 못하기 때문에 여기에서 tikzpicture 를 사용 했습니다 . 물론 그것으로도 작동합니다. (참고로 현재 버전의 adjustbox 에는 버그가 있습니다. 아래 예시 이미지를 위해 수정했지만, 상단은 여전히 ​​잘못 잘립니다. 자세히 살펴봐야 합니다. 그러나 기본 아이디어는 건전하고 작동합니다. .)

\documentclass{article}

\usepackage{tikz}
\usepackage{adjustbox}

\newsavebox{\mysavebox}
\newlength{\myrest}
\begin{document}

\begin{lrbox}{\mysavebox}%
\begin{tikzpicture}[red,thick]
 \draw (0,0) rectangle (-.9\textwidth,-2.8\textheight);
 \draw (0,0) -- (-.9\textwidth,-2.8\textheight);
 \draw (-.9\textwidth,0) -- (0,-2.8\textheight);
 \path (-1mm,-1mm);
 \path (current bounding box.north east) +(1mm,1mm);
\end{tikzpicture}%
\end{lrbox}%
%
\ifdim\ht\mysavebox>\textheight
    \setlength{\myrest}{\ht\mysavebox}%
    \loop\ifdim\myrest>\textheight
        \newpage\par\noindent
        \clipbox{0 {\myrest-\textheight} 0 {\ht\mysavebox-\myrest}}{\usebox{\mysavebox}}%
        \addtolength{\myrest}{-\textheight}%
    \repeat
    \newpage\par\noindent
    \clipbox{0 0 0 {\ht\mysavebox-\myrest}}{\usebox{\mysavebox}}%
\else
    \usebox{\mysavebox}%
\fi

\end{document}




이곳이 TeX를 위한 장소라는 것을 알고 있지만, 문제에 부딪혀 나를 위해 그것을 해결하기 위해 약간의 Python을 작성했습니다. Python 및 PIL( Python Imaging Library ) 이 필요합니다.

이와 같이 정말 긴 그림이 있고 너무 길기 때문에 더 작은 조각으로 자르고 싶다고 가정해 보겠습니다.

다음은 이를 수행하는 Python 스크립트입니다.

from __future__ import division
from PIL import Image
import math
import os

def long_slice(image_path, out_name, outdir, slice_size):
    """slice an image into parts slice_size tall"""
    img = Image.open(image_path)
    width, height = img.size
    upper = 0
    left = 0
    slices = int(math.ceil(height/slice_size))

    count = 1
    for slice in range(slices):
        #끝에 있다면 하한을 이미지의 맨 아래로 설정하십시오.
        if count == slices:
            lower = height
        else:
            lower = int(count * slice_size)  
              
        bbox = (left, upper, width, lower)
        working_slice = img.crop(bbox)
        upper += slice_size
        #슬라이스 저장
        working_slice.save(os.path.join(outdir, "slice_" + out_name + "_" + str(count)+".png"))
        count +=1
    
if __name__ == '__main__':
    
    long_slice("longcat.jpg", #image filename
               "longcat", #slice names
                os.getcwd(), #output dir
                300 #높이(px)
               )

이것이 출력이다