在一些應用中,人們想要使用橢圓作為圖中的節點形狀,例如,當在關於某一主題的文獻中通常使用橢圓來表示圖中的某些事物時。普通橢圓的問題在於它們經常浪費大量空間:
當圖形已經很寬時,橢圓左右兩端的大「端蓋」可能會非常煩人,因為它們會佔用一些空間。如果有另一種節點形狀類型仍然是圓形的,但可以節省更多空間,那就太好了。使用較平坦的端蓋,某些文字周圍的橢圓可以具有較小的寬度:
第一個橢圓仍然是正常的,但其他橢圓有點「變形」。不過,它們仍然可以被識別為橢圓(儘管嚴格來說不是)。
為此建立自訂節點形狀的過程有點超出我的想像,特別是因為在 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 height
和text depth
鍵設為較低的值,然後您就可以了。
許多其他事情都取決於inner sep
價值觀,因此負面價值觀會帶來麻煩。