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 sepJake 모양의 음수 값을 설정하는 것도 superellipse한 가지 방법입니다. 그러나 대신 의도적으로 값을 낮추고 키를 text height설정할 수 있습니다 .text depth

다른 많은 것들은 inner sep가치에 의존하므로 부정적인 가치는 문제를 야기합니다.

관련 정보