自訂、節省空間的橢圓作為 TikZ 節點形狀?

自訂、節省空間的橢圓作為 TikZ 節點形狀?

在一些應用中,人們想要使用橢圓作為圖中的節點形狀,例如,當在關於某一主題的文獻中通常使用橢圓來表示圖中的某些事物時。普通橢圓的問題在於它們經常浪費大量空間:

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

當圖形已經很寬時,橢圓左右兩端的大「端蓋」可能會非常煩人,因為它們會佔用一些空間。如果有另一種節點形狀類型仍然是圓形的,但可以節省更多空間,那就太好了。使用較平坦的端蓋,某些文字周圍的橢圓可以具有較小的寬度:

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

第一個橢圓仍然是正常的,但其他橢圓有點「變形」。不過,它們仍然可以被識別為橢圓(儘管嚴格來說不是)。

為此建立自訂節點形狀的過程有點超出我的想像,特別是因為在 Tikz 中計算某些節點上下文的正確邊界所涉及的數學可能很複雜。

以下是我用於建立這些範例的 Python 程式碼:可以看出,使用指數函數可以達到目的。但對於在實踐中使用節點形狀,在 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}"

有誰知道如何在 TikZ 中為這樣的「壓縮橢圓」或類似的東西定義新的節點形狀(透過我在上面的程式碼中所謂的「影響」進行最佳化參數化)?答案可能對很多人都有幫助,因為我認為這個節點形狀在圖形空間很小(例如演示文稿)的情況下非常有用,並且矩形或帶圓角的矩形已經被用來表示不同的東西。

編輯:Qrrbrbirlbel 提供了有關“超橢圓”的帖子的鏈接,其中包含名為“超橢圓”的新 TikZ 節點形狀的一些代碼。這正是我們所要求的。只是遺憾的是,大小計算並沒有真正運作:

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

節點太大

這可以透過添加負空格來解決,但這只是一種解決方法。

答案1

來自評論;將inner sep傑克的形狀設為負值superellipse是一種方法。但您可以故意將text heighttext depth鍵設為較低的值,然後您就可以了。

許多其他事情都取決於inner sep價值觀,因此負面價值觀會帶來麻煩。

相關內容