Tikzpictures dentro de newcommand. Texto debajo de tikzpicture. Espacio entre tikzpictures lado a lado. Dibujos superpuestos. (No completamente respondido)

Aug 21 2020

Estoy aprendiendo tikz y quería hacer algo como esto:

Imagen de ejemplo

He logrado llegar a:

Mi intento

(Editar: gramática, aclarar, preguntas resueltas)

He creado un nuevo comando para practicar la sintaxis y aprender a trabajar con tikzpictures en nuevos comandos. También estoy haciendo esto porque me gustaría aprender a crear varias imágenes siguiendo algunas expresiones matemáticas o casos similares: Imagine que necesita poder trazar un cierto tipo de diagrama complejo varias veces en el mismo documento, sería Sería una pérdida de tiempo y eficiencia reescribir el mismo código (cambiando algunas variables) una y otra vez. Entonces, es por eso que vale la pena usar newcommand aquí.

A partir de ahora, la "Figura 1" hará referencia a la imagen tikz izquierda de Mi intento; "Figura 2" lo hará con el correcto.

Tengo los siguientes problemas que no puedo resolver:

  1. Espacio entre ambas figuras (Resuelto por AndréC)

    La figura 1 se adhiere al margen izquierdo (como se desea) no como lo hace la figura 2 (con margen derecho). Las imágenes de Tikz se colocan una al lado de la otra de forma predeterminada, pero no puedo acercar la Figura 2 a la Figura 1.

  2. Título de tikzpicture (Resuelto por AndréC)

    ¿Es posible escribir el título de cada imagen tikz debajo de ella (sin mostrarla necesariamente en un cuadro)? Intenté hacer ese título usando una etiqueta de nodo en la posición (0, ymin) del eje. Pero, al hacerlo, el texto se cortó (no aparece del todo), por lo que, al intentar resolverlo, tuve que poner (0, ymin-1). Estoy tratando de poner el texto debajo de la imagen, sin estar en contacto con el eje y. Además, quiero hacer eso dentro del bloque newcommand (porque las variables inicializadas en newcommand se usan en el título).

    2.1 Números Float / Int en el título

    En otra nota, no sé por qué el primer título es "Figura (-3.0, 4) radio = 2", en lugar de "Figura (-3.0,4.0) radio = 2.0", como ocurre en el segundo título. (Me gustaría "Figura (-3, 4) radio = 2" en la Figura 1 y "Figura (-4, -2) radio = 1.5" en la Figura 2).

  3. Texto después de tikzpicture (resuelto por AndréC)

    No sé qué está pasando con "Longitud del segmento", el texto correspondiente a la Figura 1 aparece en el medio y el correspondiente a la Figura 2 aparece a la izquierda.

  4. Pregunta superpuesta

    DETALLE IMPORTANTE, en la figura 1 de la imagen de ejemplo , el segmento rojo tiene su primer nodo en el centro de la circunferencia, pero está superpuesto. De la misma manera, el triángulo se superpone a la circunferencia y el segmento se superpone al triángulo (en el área no cubierta por la circunferencia). No sé si se podría hacer algo como esto en LaTeX, solo tengo curiosidad al respecto. ( Aquí está la pregunta ) Me pregunto (para dos dibujos diferentes en la misma imagen tikz, por ejemplo, segmento y circunferencia) si la única forma de hacer que una cosa se superponga a la otra es aumentando la opacidad del que desea estar arriba.

Mi código (MWE) es:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc,math}
\usetikzlibrary{shapes.misc}
\usepackage{pgfplots}

\pgfplotsset{compat=newest}

\usepackage{vmargin}
\setmargins{2.5cm}      
{1.5cm}                
{15.5cm}               
{23.42cm}           
{10pt}                 
{1cm}                 
{0pt}                    
{2cm}

\begin{document}

\newcommand{\learningtikz}[3]{
    \tikzmath{
        \mya = #1;
        \myb = #2;
        \myr = #3;
        \d = veclen(\mya - 0, \myb - (-1));
    }
    \begin{tikzpicture}
    \begin{axis}[
    axis lines* = middle,
    axis equal,
    xmin = -5, xmax= 8, ymin= -5, ymax = 7,
    xtick = \empty, ytick = \empty,
    extra x ticks={\mya, 2},
    extra y ticks={\myb, -1}
    ]
    \filldraw [red] (axis cs:\mya,\myb) circle (0.1);
    \filldraw [red] (axis cs:0,-1) circle (0.1);
    \draw[dashed, red] (\mya, \myb) -- (0, -1);
    \filldraw [dashed, green, fill opacity=0.1] (axis cs:\mya,\myb) circle(\myr);
    \filldraw [blue, fill opacity=0.2](-2.5,1) -- (6,0) -- (\mya+1,\myb+1) -- (-2.5,1);
    \node [label={(a,b)}] at (\mya, \myb) {};
    \node [label={Figure (\mya,\myb) radius=\myr}] at (0,-5) {};
    \end{axis}
    \end{tikzpicture}
    \medskip
    Segment length is \d
}

\learningtikz{-3}{4}{2} 
\learningtikz{-4}{-2}{1.5}

\end{document}

Respuestas

5 AndréC Aug 21 2020 at 04:29

Las figuras son desde el punto de vista de TeX cajas grandes y el texto en sí está compuesto por cajas. Estos cuadros se colocan uno al lado del otro, por lo que la figura de la derecha se coloca después de los cuadros de texto que los separan. Para acercar las figuras, simplemente incluí el texto en las figuras con el nodo de operación.

El código está comentado con %<--

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc,math}
\usetikzlibrary{shapes.misc}
\usepackage{pgfplots}

\pgfplotsset{compat=newest}

\usepackage{vmargin}
\setmargins{2.5cm}      
{1.5cm}                
{15.5cm}               
{23.42cm}           
{10pt}                 
{1cm}                 
{0pt}                    
{2cm}

\begin{document}

\newcommand{\learningtikz}[3]{
    \tikzmath{
        \mya = #1;
        \myb = #2;
        \myr = #3;
        \d = veclen(\mya - 0, \myb - (-1));
    }
    \begin{tikzpicture}
    \begin{axis}[
    axis lines* = middle,
    axis equal,
    xmin = -5, xmax= 8, ymin= -5, ymax = 7,
    xtick = \empty, ytick = \empty,
    extra x ticks={\mya, 2},
    extra y ticks={\myb, -1}
    ]
    \filldraw [red] (axis cs:\mya,\myb) circle (0.1);
    \filldraw [red] (axis cs:0,-1) circle (0.1);
    \draw[dashed, red] (\mya, \myb) -- (0, -1);
    \filldraw [dashed, green, fill opacity=0.1] (axis cs:\mya,\myb) circle(\myr);
    \filldraw [blue, fill opacity=0.2](-2.5,1) -- (6,0) -- (\mya+1,\myb+1) -- (-2.5,1);
    \node [label={(a,b)}] at (\mya, \myb) {};
    \node [label={Figure (\mya,\myb) radius=\myr}] at (0,-5) {};
    \end{axis}
        
    \node [below,yshift=-3pt,thick,label={[below,draw,inner sep=3pt,thick,font=\bf]:Figure (\mya,\myb) radius=\myr}] at (current bounding box.south) {};%<-- name of the figure below the current bounding box
    \node[below] at (current bounding box.south){ Segment length is \d};%<-- positioning of the text under the figure (below the current bounding box which is now bigger
    \end{tikzpicture}
    %\medskip
}

\learningtikz{-3}{4}{2} 
\learningtikz{-4}{-2}{1.5}

\end{document}