여러 연결된 이미지: 라벨 지정 및 페이지 채우기

여러 연결된 이미지: 라벨 지정 및 페이지 채우기

이전에 질문한 덕분에라텍스에서 화살표로 이미지를 연결하는 방법은 무엇입니까?

화살표로 연결된 이미지 세트를 만들 수 있었습니다. 그러나 두 가지 질문이 있습니다.

  • 각 이미지에 어떻게 라벨을 붙이나요? (텍스트에서 그림 1.2 또는 1.5를 참조하기 위해)
  • 어떤 이유로 생성된 이미지는 페이지 전체를 채우거나(시각적으로는 반 페이지 이상) 이미지의 같은 페이지에 텍스트가 허용되지 않습니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

감사해요

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}[lablum/.style={label=below:#1,name=img-#1},
marr/.style={line width=1mm,-latex}]
\matrix[column sep=1cm,row sep=5mm] (mat)
{ \node[lablum=1]{\includegraphics[width=3cm]{example-image-     duck}};
 & \node[lablum=2]{\includegraphics[width=3cm]{example-image-duck}};\\
\node[lablum=4]{\includegraphics[width=3cm]{example-image-duck}};
& \node[lablum=3]{\includegraphics[width=3cm]{example-image-duck}};\\
\node[lablum=5]{\includegraphics[width=3cm]{example-image-duck}};
& \node[lablum=6]{\includegraphics[width=3cm]{example-image-duck}};\\
};
\draw[marr] (img-1) -- (img-2);
\draw[marr] ([xshift=1mm]img-2.south east) coordinate (aux) 
-- (img-3.north-|aux);
\draw[marr] (img-3) -- (img-4);
\draw[marr] ([xshift=-1mm]img-4.south west) coordinate (aux) 
-- (img-5.north-|aux);
\draw[marr] (img-5) -- (img-6);
\end{tikzpicture}
\caption{A matrix of figures.}
\label{fig:pffft}
\end{figure}
\end{document}

답변1

을 고수하고 싶다면 matrix작업을 단순화할 수 있습니다. 먼저 옵션 matrix of nodes(이를 위해 라이브러리를 로드해야 함 matrix)을 사용하면 매트릭스 노드의 스타일을 훨씬 쉽게 지정할 수 있습니다.

그런 다음 현재 figure카운터를 사용하고(조판된 후에만 업데이트되므로 여기에 1을 추가 \caption) 스타일을 통해 제공한 인수를 추가하여 자동으로 레이블을 설정할 수 있습니다 lablum.

특정 노드 이름을 사용하여 행렬 노드를 참조하는 것이 이미 가능합니다. 예를 들어 행렬의 왼쪽 상단 모서리에 있는 첫 번째 노드는 이므로 mat-1-1자체 노드 이름을 정의할 필요는 없습니다. 하위 그림을 부스트로페도닉 방식으로 배치했는데, 나는 그것을 당신의 방식대로 유지했습니다.

그림이 전체 페이지를 채우는 문제는 아마도 하위 그림의 크기 때문일 것입니다. 약간의 크기를 조정해 보십시오. 아래 예는 가능한 경우 텍스트가 있는 페이지에 그림을 배치해야 함을 보여줍니다.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\usepackage{lipsum}

\begin{document}

\lipsum[1]

\begin{figure}
\centering
\begin{tikzpicture}[
    lablum/.style={
        label=below:{\pgfmathparse{int(\thefigure+1)}\pgfmathresult.#1},
        name={img-#1},
    },
    marr/.style={
        line width=1mm,
        -latex
    }]
\matrix[matrix of nodes, column sep=1cm, row sep=5mm] (mat)
{ |[lablum=1]| \includegraphics[width=3cm]{example-image-duck} & 
  |[lablum=2]| \includegraphics[width=3cm]{example-image-duck} \\
  |[lablum=4]| \includegraphics[width=3cm]{example-image-duck} & 
  |[lablum=3]| \includegraphics[width=3cm]{example-image-duck} \\
  |[lablum=5]| \includegraphics[width=3cm]{example-image-duck} & 
  |[lablum=6]| \includegraphics[width=3cm]{example-image-duck} \\
};
\draw[marr] (img-1) -- (img-2);
\draw[marr] ([xshift=1mm]img-2.south east) coordinate (aux) 
    -- (img-3.north-|aux);
\draw[marr] (img-3) -- (img-4);
\draw[marr] ([xshift=-1mm]img-4.south west) coordinate (aux) 
    -- (img-5.north-|aux);
\draw[marr] (img-5) -- (img-6);
\end{tikzpicture}
\caption{A matrix of figures.}
\label{fig:pffft}
\end{figure}
\end{document}

여기에 이미지 설명을 입력하세요


티에게 맡겨도 돼케이Z/PGF는 또한 라벨을 완전히 자동으로 계산합니다(미리 열 개수만 알려 주면 됩니다).

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}[
    boustrophedon matrix/.style args={#1/#2}{
        matrix of nodes,
        nodes in empty cells, 
        boustrophedon matrix column count/.initial={#2},
        boustrophedon matrix step cell counter/.code={
            \pgfmathparse{
                mod(\pgfmatrixcurrentrow, 2) == 0 ?
                int(\pgfkeysvalueof{/tikz/boustrophedon matrix column count} * 
                    \pgfmatrixcurrentrow -
                    \pgfmatrixcurrentcolumn + 1) :
                int(\pgfkeysvalueof{/tikz/boustrophedon matrix column count} * 
                    (\pgfmatrixcurrentrow - 1) + 
                    \pgfmatrixcurrentcolumn)
            } 
            \global\pgfkeyslet{/tikz/boustrophedon matrix cell counter}{\pgfmathresult}
        },
        execute at begin cell={
            |[boustrophedon matrix step cell counter, label={below:{
                    \pgfmathparse{int(\thefigure+1)}\pgfmathresult.%
                    \pgfkeysvalueof{/tikz/boustrophedon matrix cell counter}
                }
            },
            name={#1-index-\pgfkeysvalueof{/tikz/boustrophedon matrix cell counter}}]|
        },
    },
    marr/.style={
        line width=1mm,
        -latex
    }]
\matrix[boustrophedon matrix={matrix one/2}, column sep=1cm, row sep=5mm]{ 
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} \\
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} \\
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} \\
};

\draw[marr] (matrix one-index-1) -- (matrix one-index-2);
\draw[marr] (matrix one-index-2.south east) -- (matrix one-index-3.north east);
\draw[marr] (matrix one-index-3) -- (matrix one-index-4);
\draw[marr] (matrix one-index-4.south west) -- (matrix one-index-5.north west);
\draw[marr] (matrix one-index-5) -- (matrix one-index-6);

\end{tikzpicture}
\caption{A matrix of figures.}
\label{fig:pffft}
\end{figure}

\end{document}

여기에 이미지 설명을 입력하세요

세 개의 열이 있는 경우:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}[
    boustrophedon matrix/.style args={#1/#2}{
        matrix of nodes,
        nodes in empty cells, 
        boustrophedon matrix column count/.initial={#2},
        boustrophedon matrix step cell counter/.code={
            \pgfmathparse{
                mod(\pgfmatrixcurrentrow, 2) == 0 ?
                int(\pgfkeysvalueof{/tikz/boustrophedon matrix column count} * (\pgfmatrixcurrentrow) -
                    \pgfmatrixcurrentcolumn + 1) :
                int(\pgfkeysvalueof{/tikz/boustrophedon matrix column count} * (\pgfmatrixcurrentrow - 1) + 
                    \pgfmatrixcurrentcolumn)
            } 
            \global\pgfkeyslet{/tikz/boustrophedon matrix cell counter}{\pgfmathresult}
        },
        execute at begin cell={
            |[boustrophedon matrix step cell counter, label={below:{
                    \pgfmathparse{int(\thefigure+1)}\pgfmathresult.%
                    \pgfkeysvalueof{/tikz/boustrophedon matrix cell counter}
                }
            },
            name={#1-index-\pgfkeysvalueof{/tikz/boustrophedon matrix cell counter}}]|
        },
    },
    marr/.style={
        line width=1mm,
        -latex
    }]
\matrix[boustrophedon matrix={matrix two/3}, column sep=1cm, row sep=5mm]{ 
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} \\
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} \\
};

\draw[marr] (matrix two-index-1) -- (matrix two-index-2);
\draw[marr] (matrix two-index-2) -- (matrix two-index-3);
\draw[marr] (matrix two-index-3.south east) -- (matrix two-index-4.north east);
\draw[marr] (matrix two-index-4) -- (matrix two-index-5);
\draw[marr] (matrix two-index-5) -- (matrix two-index-6);

\end{tikzpicture}
\caption{A matrix of figures.}
\label{fig:pffft}
\end{figure}

\end{document}

여기에 이미지 설명을 입력하세요


패키지 를 사용하면 참조하는 것이 더 쉬울 수 있지만 언제든지 자신만의 참조 카운터를 만들 수 있습니다 . 다음을 기반으로 하는 subcaption매크로를 만들었지 만 카운터를 늘리는 대신 여기에 유용한 특정 값으로 설정했습니다.\refsetcounter\refstepcounter

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\newcounter{matrix}
\newcounter{matrixnode}[matrix]
\renewcommand*{\thematrixnode}{\thematrix.\arabic{matrixnode}}

\makeatletter
\newcommand{\refsetcounter}[2]{\setcounter{#1}{#2}%
    \protected@edef\@currentlabel
       {\csname p@#1\endcsname\csname the#1\endcsname}%
}
\makeatother

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}[
    boustrophedon matrix/.style args={#1/#2}{
        matrix of nodes,
        nodes in empty cells, 
        boustrophedon matrix column count/.initial={#2},
        boustrophedon matrix step cell counter/.code={
            \pgfmathparse{
                mod(\pgfmatrixcurrentrow, 2) == 0 ?
                int(\pgfkeysvalueof{/tikz/boustrophedon matrix column count} * (\pgfmatrixcurrentrow) -
                    \pgfmatrixcurrentcolumn + 1) :
                int(\pgfkeysvalueof{/tikz/boustrophedon matrix column count} * (\pgfmatrixcurrentrow - 1) + 
                    \pgfmatrixcurrentcolumn)
            } 
            \global\pgfkeyslet{/tikz/boustrophedon matrix cell counter}{\pgfmathresult}
        },
        row 1 column 1/.append style={
            execute at begin cell={
                \refstepcounter{matrix}
            }
        },
        execute at begin cell={
            |[boustrophedon matrix step cell counter, label={below:{
                    \pgfmathparse{int(\thefigure+1)}\pgfmathresult.%
                    \pgfkeysvalueof{/tikz/boustrophedon matrix cell counter}
                    \refsetcounter{matrixnode}{\pgfkeysvalueof{/tikz/boustrophedon matrix cell counter}}
                    \label{matrixnode:#1-\pgfkeysvalueof{/tikz/boustrophedon matrix cell counter}}
                }
            },
            name={#1-index-\pgfkeysvalueof{/tikz/boustrophedon matrix cell counter}}]|
        },
    },
    marr/.style={
        line width=1mm,
        -latex
    }]
\matrix[boustrophedon matrix={matrix two/3}, column sep=1cm, row sep=5mm]{ 
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} \\
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} & 
  \includegraphics[width=3cm]{example-image-duck} \\
};

\draw[marr] (matrix two-index-1) -- (matrix two-index-2);
\draw[marr] (matrix two-index-2) -- (matrix two-index-3);
\draw[marr] (matrix two-index-3.south east) -- (matrix two-index-4.north east);
\draw[marr] (matrix two-index-4) -- (matrix two-index-5);
\draw[marr] (matrix two-index-5) -- (matrix two-index-6);

\end{tikzpicture}
\caption{A matrix of figures.}
\label{fig:pffft}
\end{figure}

See subfigure \ref{matrixnode:matrix two-1} and \ref{matrixnode:matrix two-4}.

\end{document}

여기에 이미지 설명을 입력하세요

사실, 나는 당신이 무엇을 쫓고 있는지 잘 모르겠습니다. 라벨링과 캡션을 사용자 정의 가능하게 유지하려면 다음과 같이 하면 됩니다.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\newcounter{matrix}
\newcounter{matrixnode}[matrix]
\renewcommand*{\thematrixnode}{\thematrix.\arabic{matrixnode}}

\makeatletter
\newcommand{\refsetcounter}[2]{\setcounter{#1}{#2}%
    \protected@edef\@currentlabel
       {\csname p@#1\endcsname\csname the#1\endcsname}%
}
\makeatother

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}[
    my custom matrix/.style={
        matrix of nodes, 
        nodes in empty cells, 
        nodes={
            fill=red!10,
            minimum height=3.25cm,
            minimum width=3.25cm,
        },
        every label/.style={
            minimum height=0pt,
        },
        lablum/.style args={##1/##2}{
            label=below:{%
                \pgfmathparse{int(\thefigure+1)}\pgfmathresult.##1: ##2%
                \refsetcounter{matrixnode}{##1}\label{matrixnode:#1-##1}%
            },
            name={#1-index-##1},
        },
        my custom matrix initialise/.code={
            \refstepcounter{matrix}
        },
        my custom matrix initialise
    },
    marr/.style={
        line width=1mm,
        -latex
    }]
\matrix[column sep=1cm, row sep=5mm, my custom matrix={mat}] { 
  |[lablum={1/my caption}]| \includegraphics[width=3cm]{example-image-duck} & 
  |[lablum={2/foo}]| \includegraphics[width=3cm]{example-image-duck} \\
  |[lablum={7/bar}]| \includegraphics[width=3cm]{example-image-duck} & 
  |[lablum={5/baz}]| \includegraphics[width=3cm]{example-image-duck} & 
  |[lablum={3/foo}]| \includegraphics[width=3cm]{example-image-duck} \\
};
\draw[marr] (mat-index-1) -- (mat-index-2);
\draw[marr] (mat-index-3) -- (mat-index-5);
\end{tikzpicture}
\caption{A matrix of figures.}
\label{fig:pffft}
\end{figure}

See subfigure \ref{matrixnode:mat-1} and \ref{matrixnode:mat-5}.

\end{document}

여기에 이미지 설명을 입력하세요

행렬 셀의 크기를 동일하게 만들기 위해 몇 가지 스타일을 추가했습니다. 이를 더 명확하게 하기 위해 표시할 노드에 몇 가지 색상을 추가했습니다. 이 색상은 간단히 제거할 수 있습니다( 삭제하여 fill=red!10).


마지막으로 패키지를 사용하면 작업이 훨씬 더 쉬울 수 있지만 subcaption노드를 자유롭게 배치하는 것은 쉽지 않습니다(예: 오른쪽에서 왼쪽으로).

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\usepackage{subcaption}

\captionsetup[subfigure]{labelformat=simple}
\DeclareCaptionSubType*{figure}
\renewcommand\thesubfigure{\thefigure.\arabic{subfigure}}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}[
    marr/.style={
        line width=1mm,
        -latex
    }]
\matrix[matrix of nodes, column sep=1cm, row sep=5mm] (mat) { 
  \subcaptionbox{foo\label{subfig:1-1}}{\includegraphics[width=3cm]{example-image-duck}} & 
  \subcaptionbox{bar\label{subfig:1-2}}{\includegraphics[width=3cm]{example-image-duck}} \\
  \subcaptionbox{baz\label{subfig:1-3}}{\includegraphics[width=3cm]{example-image-duck}} & 
  \subcaptionbox{foo\label{subfig:1-4}}{\includegraphics[width=3cm]{example-image-duck}} & 
  \subcaptionbox{bar\label{subfig:1-5}}{\includegraphics[width=3cm]{example-image-duck}} \\
};
\draw[marr] (mat-1-1) -- (mat-1-2);
\end{tikzpicture}
\caption{A matrix of figures.}
\label{fig:pffft}
\end{figure}

See subfigure \ref{subfig:1-1} and \ref{subfig:1-5}.

\end{document}

여기에 이미지 설명을 입력하세요

관련 정보