Добавьте подпись под нарисованной картинкой.

Добавьте подпись под нарисованной картинкой.

У меня есть следующий код, который создает сетку 3x3 со стрелкой в ​​ней. В некоторых ячейках сетки есть #.

\begin{picture}(185,90)
\put(0,0){\framebox(30,30)}
\put(30,0){\framebox(30,30)}
\put(60,0){\framebox(30,30)}
\put(0,30){\framebox(30,30)}
\put(30,30){\framebox(30,30)}
\put(60,30){\framebox(30,30){\Large{\#}}}
\put(0,60){\framebox(30,30){\Large{\#}}}
\put(30,60){\framebox(30,30){\Large{\#}}}
\put(60,60){\framebox(30,30){\Large{\#}}}
\put(15,45){\vector(1,0){30}}
\end{picture}

Результат создания с помощью pdflatex

Я хотел бы сделать подпись под нарисованной картинкой. Как мне этого добиться? Я считаю, что нельзя делать подпись внутри\begin{картинка}. Я также пробовал завернуть его в\begin{figure}безуспешно.

решение1

Поместите pictureвнутрь minipage. Это позволит включить его в figureсреду, которая, следовательно, позволит \caption.

\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{figure}[ht]
\centering
\begin{minipage}{1.3in}
\begin{picture}(185,90)
\put(0,0){\framebox(30,30)}
\put(30,0){\framebox(30,30)}
\put(60,0){\framebox(30,30)}
\put(0,30){\framebox(30,30)}
\put(30,30){\framebox(30,30)}
\put(60,30){\framebox(30,30){\Large{\#}}}
\put(0,60){\framebox(30,30){\Large{\#}}}
\put(30,60){\framebox(30,30){\Large{\#}}}
\put(60,60){\framebox(30,30){\Large{\#}}}
\put(15,45){\vector(1,0){30}}
\end{picture}
\end{minipage}
\caption{Here is my caption.}
\end{figure}
\lipsum[2]
\end{document}

введите описание изображения здесь

Продолжая комментарий автора, можно сказать, что для того, чтобы получить несколько изображений на одной строке, можно разместить соседние minipages на одной строке, при условии, что они не превышают \linewidth.

\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{figure}[ht]
\centering
\begin{minipage}{1.3in}
\begin{picture}(185,90)
\put(0,0){\framebox(30,30)}
\put(30,0){\framebox(30,30)}
\put(60,0){\framebox(30,30)}
\put(0,30){\framebox(30,30)}
\put(30,30){\framebox(30,30)}
\put(60,30){\framebox(30,30){\Large{\#}}}
\put(0,60){\framebox(30,30){\Large{\#}}}
\put(30,60){\framebox(30,30){\Large{\#}}}
\put(60,60){\framebox(30,30){\Large{\#}}}
\put(15,45){\vector(1,0){30}}
\end{picture}
\end{minipage}
\begin{minipage}{1.3in}
\begin{picture}(185,90)
\put(0,0){\framebox(30,30)}
\put(30,0){\framebox(30,30)}
\put(60,0){\framebox(30,30)}
\put(0,30){\framebox(30,30)}
\put(30,30){\framebox(30,30)}
\put(60,30){\framebox(30,30){\Large{\#}}}
\put(0,60){\framebox(30,30){\Large{\#}}}
\put(30,60){\framebox(30,30){\Large{\#}}}
\put(60,60){\framebox(30,30){\Large{\#}}}
\put(15,45){\vector(1,0){30}}
\end{picture}
\end{minipage}
\caption{Here is my caption.}
\end{figure}
\lipsum[2]
\end{document}

введите описание изображения здесь

решение2

Вы указываете слишком большую ограничивающую рамку для картинки; более того, вы забываете пустой аргумент для пустых рамок. Обратите внимание, что\Large не делаетпримите аргумент.

\documentclass{article}
\usepackage{pict2e}

\begin{document}

\begin{figure}
\centering

\begin{picture}(90,90)
\put(0,0){\framebox(30,30){}}
\put(30,0){\framebox(30,30){}}
\put(60,0){\framebox(30,30){}}
\put(0,30){\framebox(30,30){}}
\put(30,30){\framebox(30,30){}}
\put(60,30){\framebox(30,30){\Large\#}}
\put(0,60){\framebox(30,30){\Large\#}}
\put(30,60){\framebox(30,30){\Large\#}}
\put(60,60){\framebox(30,30){\Large\#}}
\put(15,45){\vector(1,0){30}}
\end{picture}

\caption{A picture}

\end{figure}

\end{document}

введите описание изображения здесь

Нет никаких проблем с более чем одной картинкой:

\documentclass{article}
\usepackage{pict2e}

\begin{document}

\begin{figure}
\centering

\begin{picture}(90,90)
\put(0,0){\framebox(30,30){}}
\put(30,0){\framebox(30,30){}}
\put(60,0){\framebox(30,30){}}
\put(0,30){\framebox(30,30){}}
\put(30,30){\framebox(30,30){}}
\put(60,30){\framebox(30,30){\Large\#}}
\put(0,60){\framebox(30,30){\Large\#}}
\put(30,60){\framebox(30,30){\Large\#}}
\put(60,60){\framebox(30,30){\Large\#}}
\put(15,45){\vector(1,0){30}}
\end{picture}\qquad
\begin{picture}(90,90)
\put(0,0){\framebox(30,30){}}
\put(30,0){\framebox(30,30){}}
\put(60,0){\framebox(30,30){}}
\put(0,30){\framebox(30,30){}}
\put(30,30){\framebox(30,30){}}
\put(60,30){\framebox(30,30){\Large\#}}
\put(0,60){\framebox(30,30){\Large\#}}
\put(30,60){\framebox(30,30){\Large\#}}
\put(60,60){\framebox(30,30){\Large\#}}
\put(15,45){\vector(1,0){30}}
\end{picture}

\caption{A picture}

\end{figure}

\end{document}

введите описание изображения здесь


Лучший способ нарисовать рисунок — использовать линии вместо прямоугольников: это позволяет избежать «удвоения» внутренних линий.

\documentclass{article}
\usepackage{pict2e}

\begin{document}

\begin{figure}
\centering

\begin{picture}(90,90)
\polygon(0,0)(90,0)(90,90)(0,90)
\put(30,0){\line(0,1){90}}
\put(60,0){\line(0,1){90}}
\put(0,30){\line(1,0){90}}
\put(0,60){\line(1,0){90}}
\put(15,75){\makebox(0,0){\Large\#}}
\put(45,75){\makebox(0,0){\Large\#}}
\put(75,75){\makebox(0,0){\Large\#}}
\put(75,45){\makebox(0,0){\Large\#}}
\put(15,45){\vector(1,0){30}}
\end{picture}

\caption{A picture}

\end{figure}

\end{document}

Обратите внимание, как нарисована граница \polygon.

введите описание изображения здесь

решение3

Вопрос довольно старый, но я хотел показать мощь и простоту tikz:

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}

\foreach \x in {0,1,2,3}
\draw (\x,0)--(\x,3)  (0,\x)--(3,\x);

\foreach \x/\y in {0.5/2.5,1.5/2.5,2.5/2.5,2.5/1.5}
\node at (\x,\y) {\Large{\#}};

\draw[-latex] (.5,1.5)--(1.5,1.5);

\end{tikzpicture}
\caption{A picture}
\end{figure}

\end{document}

введите описание изображения здесь

Связанный контент