1. Logre colocar las curvas en el centro de cada viñeta:

1. Logre colocar las curvas en el centro de cada viñeta:

Quiero dibujar una curva Z en LaTeX usando TikZel sistema Lindenmayer. Pero no logré colocar las curvas en el centro de cada viñeta. Además no encuentro ninguna forma elegante de que todas las curvas tengan el mismo tamaño.

Esto es lo que obtengo:

ingrese la descripción de la imagen aquí

Aquí está mi código:

\documentclass[a4paper,11pt]{article}

\usepackage{graphicx}          
\usepackage{caption}
\usepackage{subcaption} 
\usepackage{tikz}


\begin{document}
\usetikzlibrary{lindenmayersystems}
\pgfdeclarelindenmayersystem{z-curve}{
\symbol{I}{\pgftransformscale{+0.25\pgflsystemstep}}
\symbol{p}{%
  \pgfpathmoveto{\pgfqpoint{1pt}{3pt}}\pgfpathlineto{\pgfqpoint{3pt}{3pt}}%
  \pgfpathlineto{\pgfqpoint{1pt}{1pt}}\pgfpathlineto{\pgfqpoint{3pt}{1pt}}%
}
\symbol{q}{%
  \pgfpathlineto{\pgfqpoint{1pt}{3pt}}\pgfpathlineto{\pgfqpoint{3pt}{3pt}}%
  \pgfpathlineto{\pgfqpoint{1pt}{1pt}}\pgfpathlineto{\pgfqpoint{3pt}{1pt}}%
}
\symbol{S}{\pgftransformscale{+0.5pt}}
\symbol{A}{\pgftransformshift{\pgfqpoint{0pt}{4pt}}}
\symbol{B}{\pgftransformshift{\pgfqpoint{4pt}{4pt}}}
\symbol{C}{\pgftransformshift{\pgfqpoint{4pt}{0pt}}}
\symbol{[}{\bgroup}
\symbol{]}{\egroup}
\rule{Z -> Ip}
\rule{p -> S[Ap][Bq][q][Cq]}
\rule{q -> S[Aq][Bq][q][Cq]}
}

\begin{figure}[ht]
\centering
\subcaptionbox{}
{\begin{tikzpicture}[scale=2]
\draw [l-system={z-curve, step=1cm, axiom=Z, order=1}] l-system;
\end{tikzpicture}}
\hspace{1cm}
\subcaptionbox{}
{\begin{tikzpicture}[scale=2]
\draw [l-system={z-curve, step=1cm, axiom=Z, order=2}] l-system;
\end{tikzpicture}}
\hspace{1cm}
\subcaptionbox{}
{\begin{tikzpicture}[scale=2]
\draw [l-system={z-curve, step=1cm, axiom=Z, order=3}] l-system;
\end{tikzpicture}}
\hspace{1cm}
\subcaptionbox{}
{\begin{tikzpicture}[scale=2]
\draw [l-system={z-curve, step=1cm, axiom=Z, order=4}] l-system;
\end{tikzpicture}}
\end{figure}

\end{document}

¿Alguna sugerencia de qué debo cambiar para obtener lo que quiero?

Respuesta1

1. Logre colocar las curvas en el centro de cada viñeta:

Cambié los símbolos p y q (dominio horizontal: 0pta 2pt; en lugar de 1pta 3pt) para lograr un centrado horizontal. Verticalmente también comienza desde 0pten lugar de 1pt. Con \draw(<x>,<y>)...él podrías colocar las curvas posteriormente de forma arbitraria. Por ejemplo con \draw(0,0).

\symbol{p}{%
  \pgfpathmoveto{\pgfqpoint{0pt}{2pt}}\pgfpathlineto{\pgfqpoint{2pt}{2pt}}%
  \pgfpathlineto{\pgfqpoint{0pt}{0pt}}\pgfpathlineto{\pgfqpoint{2pt}{0pt}}%
}
\symbol{q}{%
  \pgfpathlineto{\pgfqpoint{0pt}{2pt}}\pgfpathlineto{\pgfqpoint{2pt}{2pt}}%
  \pgfpathlineto{\pgfqpoint{0pt}{0pt}}\pgfpathlineto{\pgfqpoint{2pt}{0pt}}%
}

2. Mismo tamaño de todas las curvas:

Con\resizebox{<horizontal size>}{<vertical size>}{...} (ver:4.3.2 Escalar al tamaño solicitado, p.8 en el manual ["Paquetes en el paquete de 'gráficos'"]) puede establecer el tamaño horizontal y vertical del archivo tikzpicture. Si quieres que tikzpicturese escale proporcionalmente, puedes poner uno de los tamaños y poner !el otro.

\resizebox{!}{2cm}{
\begin{tikzpicture}
\draw[black](0,0) l-system [l-system={z-curve, step=1cm, axiom=Z, order=1}];
\end{tikzpicture}
}

3. Nota

Utilicé \subfloaty reduje la importación de paquetes, porque TikZ se carga graphicxautomáticamente.


Resultado:

ingrese la descripción de la imagen aquí


MWE:

\documentclass[a4paper,11pt]{article}
\usepackage{tikz}
\usepackage{subfig}
\begin{document}
\usetikzlibrary{lindenmayersystems}
\pgfdeclarelindenmayersystem{z-curve}{
\symbol{I}{\pgftransformscale{+0.25\pgflsystemstep}}
\symbol{p}{%
  \pgfpathmoveto{\pgfqpoint{0pt}{2pt}}\pgfpathlineto{\pgfqpoint{2pt}{2pt}}%
  \pgfpathlineto{\pgfqpoint{0pt}{0pt}}\pgfpathlineto{\pgfqpoint{2pt}{0pt}}%
}
\symbol{q}{%
  \pgfpathlineto{\pgfqpoint{0pt}{2pt}}\pgfpathlineto{\pgfqpoint{2pt}{2pt}}%
  \pgfpathlineto{\pgfqpoint{0pt}{0pt}}\pgfpathlineto{\pgfqpoint{2pt}{0pt}}%
}
\symbol{S}{\pgftransformscale{+0.5pt}}
\symbol{A}{\pgftransformshift{\pgfqpoint{0pt}{4pt}}}
\symbol{B}{\pgftransformshift{\pgfqpoint{4pt}{4pt}}}
\symbol{C}{\pgftransformshift{\pgfqpoint{4pt}{0pt}}}
\symbol{[}{\bgroup}
\symbol{]}{\egroup}
\rule{Z -> Ip}
\rule{p -> S[Ap][Bq][q][Cq]}
\rule{q -> S[Aq][Bq][q][Cq]}
}

\begin{figure}[h!]
\centering
\subfloat[]{\label{fig:a}
\resizebox{!}{2cm}{
\begin{tikzpicture}
\draw[black](0,0) l-system [l-system={z-curve, step=1cm, axiom=Z, order=1}];
\end{tikzpicture}
}
}
\hfill
\subfloat[]{\label{fig:a}
\resizebox{!}{2cm}{
\begin{tikzpicture}
\draw [red](0,0) l-system  [l-system={z-curve, step=1cm, axiom=Z, order=2}];
\end{tikzpicture}
}
}
\hfill
\subfloat[]{\label{fig:a}
\resizebox{!}{2cm}{
\begin{tikzpicture}
\draw [blue](0,0) l-system  [l-system={z-curve, step=1cm, axiom=Z, order=3}];
\end{tikzpicture}
}
}
\hfill
\subfloat[]{\label{fig:a}
\resizebox{!}{2cm}{
\begin{tikzpicture}
\draw [green](0,0) l-system  [l-system={z-curve, step=1cm, axiom=Z, order=4}];
\end{tikzpicture}
}
}
\hfill
\caption{Z-Curve using TikZ and the Lindenmayer system}\label{fig:LabelFigOne}
\end{figure}
\end{document}

información relacionada