1. 各箇条書きの中央に曲線を配置します。

1. 各箇条書きの中央に曲線を配置します。

Lindenmayer システムを使用して LaTeX で Z 曲線を描画したいのですTikZが、各箇条書きの中央に曲線を配置することができませんでした。さらに、すべての曲線が同じサイズになるようなエレガントな方法も見つかりません。

私が得たものは次のとおりです:

ここに画像の説明を入力してください

これが私のコードです:

\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}

望む結果を得るために何を変更すべきか、何かアドバイスはありますか?

答え1

1. 各箇条書きの中央に曲線を配置します。

水平方向の中央揃えを実現するために、シンボル p と q (水平方向のドメイン:0ptを ; に、を2ptに変更) を変更しました。垂直方向も ではなくから始まります。 を使用すると、後で曲線を任意に配置できます。たとえば を使用すると、曲線を任意に配置できます。1pt3pt0pt1pt\draw(<x>,<y>)...\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. すべての曲線のサイズが同じ:

(参照\resizebox{<horizontal size>}{<vertical size>}{...}4.3.2 要求されたサイズへのスケーリング、マニュアルの 8 ページ [「グラフィックス バンドル内のパッケージ」]) では、 の水平方向と垂直方向のサイズを設定できますtikzpicture。 を比例して拡大縮小したい場合はtikzpicture、 のいずれかのサイズを指定して、!にもう 1 つを入力します。

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

3. 注記

\subfloatTikZ は自動的にロードされるため、パッケージのインポートを使用して削減しましたgraphicx


結果:

ここに画像の説明を入力してください


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}

関連情報