Elipse personalizada e que economiza espaço como forma de nó TikZ?

Elipse personalizada e que economiza espaço como forma de nó TikZ?

em algumas aplicações, deseja-se usar elipses como formas de nós nas figuras, por exemplo, quando a literatura sobre um assunto normalmente usa elipses para denotar certas coisas nas figuras. O problema com as elipses normais é que elas geralmente desperdiçam muito espaço:

https://i.stack.imgur.com/0wAeX.png

Quando uma figura já é muito larga, as grandes “tampas” nas extremidades esquerda e direita da elipse podem ser muito irritantes, pois consomem algum espaço. Seria bom se houvesse outro tipo de formato de nó que ainda fosse redondo, mas economizasse mais espaço. Com extremidades mais planas, uma elipse ao redor de algum texto pode ter uma largura menor:

https://i.stack.imgur.com/0wAeX.png

A primeira dessas elipses ainda é normal, mas as outras foram um pouco "transformadas". Eles ainda são reconhecíveis como elipses (embora, estritamente falando, não sejam).

O processo de construção de formas de nós personalizadas para isso está um pouco além da minha cabeça, especialmente porque a matemática que estaria envolvida para calcular os limites corretos para algum contexto de nó é provavelmente complicada de fazer no Tikz.

Aqui está o código Python que usei para construir esses exemplos: pode-se ver que usar uma função exponencial resolve. Mas para usar a forma do nó na prática, é provavelmente um pouco mais importante ter a funcionalidade de desenhar tais formas no próprio LaTeX.

#!/usr/bin/python
import math

def moreimpact(x,base):
    if x<0:
        return -math.pow(-x,base)
    else:
        return math.pow(x,base)

print "\\documentclass{article}"
print "\\usepackage{tikz}"
print "\\usetikzlibrary{shapes}"
print "\\begin{document}"
print "\\begin{tikzpicture}"
print "\\node[draw,shape=ellipse,inner sep=1pt] (f1) at (0,2) {This is a long text that leads to a very large ellipse};"

for j in xrange(0,4):
    print "\\draw",
    for i in xrange(0,360):
        if i!=0:
            print " -- ",
        xpos = math.cos(i/180.0*math.pi)
        ypos = math.sin(i/180.0*math.pi)
        print "(%f,%f)" % (5*moreimpact(xpos,1.0-0.1*j),0.3*moreimpact(ypos,1.0-0.1*j)-j*1.2),
    print " -- cycle;"
print "\\end{tikzpicture}"
print "\\end{document}"

Alguém sabe como definir uma nova forma de nó para uma "elipse compactada" ou algo semelhante no TikZ (optimamente parametrizado pelo que chamei de "impacto" no código acima)? A resposta provavelmente é útil para muitas pessoas, pois acho que esse formato de nó é bastante útil em situações em que há pouco espaço para uma figura (por exemplo, apresentações) e retângulos ou retângulos com cantos arredondados já são usados ​​para denotar algo diferente .

EDITAR:Qrrbrbirlbel forneceu um link para uma postagem sobre uma "superelipse", que contém algum código para uma nova forma de nó TikZ chamada "superelipse". Isto é precisamente o que foi pedido. É uma pena que o cálculo do tamanho realmente não funcione:

\node[shape=superellipse,superellipse parameter=3] at (2,3) {This is a long text that leads to a very large ellipse};

Um nó que é muito grande

Isso pode ser contornado adicionando espaços negativos, mas é apenas uma solução alternativa.

Responder1

Dos comentários; definir um valor negativo inner seppara a forma de Jake superellipseé um caminho a percorrer. Mas, em vez disso, você pode definir as teclas text heighte text depthdeliberadamente para valores mais baixos e sair impune.

Muitas outras coisas dependem de inner sepvalores, então valores negativos estão causando problemas.

informação relacionada