Q&A 마당은 텍 관련 질문/답변을 위해 만들었습니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- 질문 전에 아래를 읽어 보세요. 좋은 질문이 좋은 답을 받을 수 있는 좋은 방법입니다.
- 질문에 맞는 제목을 붙이세요. 질문의 내용과 관련없는 "고수님", "긴급질문", "도와주세요"와 같은 제목은 답이 잘 올라오지 않습니다. 이 게시판에 올라오는 모든 글은 질문입니다. 굳이 [질문], [Q]를 적으실 필요도 없습니다.
- 내용을 충실히 적어 주시고, 같은 상황을 재현할 수 있는 최소한의 예제가 같이 있어야 합니다.
- 최소 예제는 "Minimal working example"을 읽어 보세요.
- 파일을 첨부하실 때에는 가능한 압축하여 파일 크기를 줄여서 올려주시길 바랍니다.
- 개인적으로 사용하신 글꼴이 들어 있는 경우, preparefont.sty에 관한 답변을 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 사용하는 편집기는 CKeditor입니다.
- 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한 줄을 비웁니다.
- 글줄만 바꾸려면 [shift-enter]를 누르면 <BR> 태그가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
- 수식를 문서내에 삽입하시려면 에디터를 툴바에서 [소스]를 눌러 HTML로 입력할 수 있게 바꾸신 후 <pre> </pre> tag를 사용하셔서 <pre> 여러 줄의 수식 </pre>처럼 입력하시면 좋습니다.
tkz-graph 명령어의 중복된 vertex 이름 처리 방법?
2015.03.14 23:41
http://www.ktug.org/xe/index.php?mid=KTUG_QnA_board&document_srl=202686
위 질문에서 파생되는 질문입니다.
\documentclass[a4paper, reqno, twoside]{amsart}
\usepackage{tikz}
\usepackage{tkz-graph}
\def\linegraph#1\end{%
\begin{tikzpicture}
\SetGraphUnit{0.5}
\tikzset{VertexStyle/.style = {
shape = circle,
fill = black,
inner sep = 0pt,
outer sep = 0pt,
minimum size = 0.35em,
line width = 0pt,
draw}}
\SetVertexMath
\tikzset{EdgeStyle/.style ={thin}}
\Vertices[LabelOut,Lpos=90,Ldist=-0.2em,style={font=\scriptsize}]{line}{#1}
\Edges(#1)
\end{tikzpicture}}
\def\LinearGraph#1{\linegraph#1\end}
\begin{document}
\begin{tikzpicture}
\SetGraphUnit{0.5}
\tikzset{VertexStyle/.style = {
shape = circle,
fill = black,
inner sep = 0pt,
outer sep = 0pt,
minimum size = 0.35em,
line width = 0pt,
draw}}
\SetVertexMath
\tikzset{EdgeStyle/.style ={thin}}
\Vertices[LabelOut,Lpos=90,Ldist=-0.2em,style={font=\scriptsize}]{line}{-2,-3,-4,-5}
\Edges(-2,-3,-4,-5)
\end{tikzpicture}
VS
\LinearGraph{-2,3,-4,-5} % 문제없이 컴파일되고 원하는 결과를 얻습니다.
\LinearGraph{-2,-2,-4,-5}
% 여기서 문제가 발생합니다. 선분이 그어지지 않습니다.
% 아마도 입력값 -2, -2가 중복되어 생기는 문제인 듯 합니다.
% \LinearGraph{-2,-2,-3,-4}처럼 입력하면 vertex의 이름을 각각 a1, a2, a3, a4와 같이 서로 다른 이름으로 배정하고, label은 -2, -2, -3, -4로 원래 입력된 값으로 출력되도록 \LinearGraph 명령어를 변경할 수 있을까요?
\end{document}
댓글 8
-
그로몹
2015.03.15 11:05
-
커꿈
2015.03.15 14:42
감사합니다! 간단한 해결책이었습니다! -
커꿈
2015.03.15 14:42
감사합니다! 간단한 해결책이었습니다! -
nanim
2015.03.15 17:47
비슷한 해법인데요, 입력 수고를 좀 줄인...
\LinearGraph{-2,{}-2,-4,-5}
-
nanim
2015.03.15 13:07
expl3를 쓰지 않은 버전입니다. 아이디어는 동일합니다.
-
nanim
2015.03.15 13:49
지난번 "중간에 비는 거" 문제 때도 그랬습니다만,
\Vertices[LabelOut,Lpos=90,Ldist=-0.2em,style={font=\scriptsize}]{line}{-2,-2,-4,-5}
\Edges(-2,-2,-4,-5)
이것을 다음처럼 나누어서 생각하고 L 옵션을 사용하면 해결방법이 생길 거 같습니다. 다른 옵션은 모두 똑같으니까 "..."라고 하지요.
\Vertex[...., L=-2]{a}
\EA[..., L=-2](a){b}
\EA[..., L=-4](b){c}
\EA[..., L=-5](c){d}
\Edges(a,b,c,d)
만약 빈 거 그러니까 예컨대 {-1,,-3}처럼 입력되는 경우 두 번째 아이템에 LabelOut 대신 NoLabel을 주면 간단히 해결되겠네요.
expl3로 이 아이디어를 구현한 소스를 첨부합니다.
(처음에 달았던 답글을 조금 수정하느라고 다시 썼습니다.)
-
커꿈
2015.03.15 14:45
tkz-graph 의 옵션을 자세히 읽어보지 않은 불찰이었네요. 감사합니다! -
nanim
2015.03.15 16:30
plain TeX의 fifo 기법과 expl3를 보여드렸는데요,
이번에는 전형적인 LaTeX 방식입니다.
\usepackage{xfor,xifthen}
\makeatletter
\newcounter{@icnt}
\newcommand*\LinearGraph[1]{%
\begin{tikzpicture}
\SetGraphUnit{0.5}
\tikzset{VertexStyle/.style = {
shape = circle,
fill = black,
inner sep = 0pt,
outer sep = 0pt,
minimum size = 0.35em,
line width = 0pt,
draw}}
\SetVertexMath
\tikzset{EdgeStyle/.style ={thin}}
\def\@Edge@String{}%
\setcounter{@icnt}{0}%
\@for\curr@item:=#1\do{%
\stepcounter{@icnt}%
\ifthenelse{\equal{\the@icnt}{1}}%
{\edef\@Edge@String{A\the@icnt}%
\ifthenelse{\equal{\curr@item}{}}%
{\tg@Vertex{0}{NoLabel}{\the@icnt}}%
{\tg@Vertex{\curr@item}{LabelOut}{\the@icnt}}%
}{\edef\@Edge@String{\@Edge@String,A\the@icnt}%
\ifthenelse{\equal{\curr@item}{}}%
{\tg@EA{0}{NoLabel}{\the@icnt}}%
{\tg@EA{\curr@item}{LabelOut}{\the@icnt}}}%
}
\expandafter\Edges\expandafter(\@Edge@String)
\end{tikzpicture}%
}
\newcommand*\tg@Vertex[3]{%
\Vertex[#2,Lpos=90,Ldist=-0.2em,style={font=\scriptsize},L=#1]{A#3}%
}
\newcommand*\tg@EA[3]{%
\EA[#2,Lpos=90,Ldist=-0.2em,style={font=\scriptsize},L=#1]%
(A\expandafter\the\numexpr#3-1\relax){A#3}%
}
\makeatother
혹시 이런 것을 원하시는 건가요? 간격은 균일하고요?
\LinearGraph{{-2},{ -2 },{-4},{-5}}