我最近问过如何在角色之间建立关联线,我愿意接受各种建议。不幸的是,我没能理解给出的大多数答案。我可能应该强调,这些建议需要用解释/评论来“简化”,以便我能理解它们(这样我就可以修改它们并在以后重复使用它们)。我喜欢一些pstricks
衍生产品的输出,例如pst-asr
(https://tex.stackexchange.com/a/139694/9077) 和pst-node
(https://tex.stackexchange.com/a/139726/9077),但我不太懂代码,而且由于pst-asr
和pst-node
手册对我来说就像推理小说一样,所以我甚至在开始之前就卡住了。
因此,我TikZ
现在会坚持使用,主要是因为该手册对我来说或多或少是可以理解的,而且我TikZ
之前已经使用过一点。
以下是我根据 Alan Munn 的回答那里已经存在一些问题:
“asta”这个词中字符之间的间距不均匀。我希望字符之间的距离与在普通文本中输入单词时相同。
单词“asta”中的两行长度不等。它们的长度应该是相同的。
单词“asta”中的两行连接不顺畅。手册第 140 页提到了这个问题
TikZ
,但没有解释,只是说“欣赏差异”(我确实欣赏)。“asta”一词中的 H 应该位于两个锚点之间,而不是直接位于第二个锚点上方。
如果这些问题无法通过 解决TikZ
,我很乐意改用pst-asr
或pst-node
之类的东西。如果是这样,这次我应该坚持解释代码,否则就不值得你付出努力。由于我无法理解pst-asr
或 的手册pst-node
,我需要依靠你们的解释……
梅威瑟:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (mymatrix) % assign matrix name in ()
[
matrix of nodes,
nodes = {inner sep = 0pt, outer sep = 1pt}
% 'inner sep' sets the space around the node, i.e. between nodes
% 'outer sep' sets the space between the node and the anchor that lines will be drawn from/to
]
% create matrix of nodes: each node has the name 'matrix name'-'row number'-'column number'
{
& H &\\
[2ex] % distance between rows
a & s & a\\
};
\draw (mymatrix-1-2) -- (mymatrix-2-2); % draw line (--) from row1/column2 to row2/column2
\end{tikzpicture}
\begin{tikzpicture}
\matrix (mymatrix2)
[
matrix of nodes,
nodes = {inner sep = 0pt, outer sep = 1pt}
]
{
& & H &\\
[2ex]
a & s & t & a\\
};
\draw (mymatrix2-1-3.south) -- (mymatrix2-2-2.north);
% south anchor = in the middle at the bottom of the node
% north anchor = in the middle at the top of the node
\draw (mymatrix2-1-3) -- (mymatrix2-2-3);
\end{tikzpicture}
\end{document}
编辑:Alenanno 的建议
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
[
every node/.style = % set style of all nodes
{
minimum height = 4mm, % set minimum height of node (the higher, the further away from the node the lines will be drawn)
text height = 1mm, % set height of text in node? How can the text be 1mm high?
text depth = 0ex % depth?? What does this do?
},
level 1/.style = % set style for the highest level in the tree
{
level distance = 7mm, % set distance between levels in the tree
sibling distance = 2mm % set distance between nodes within a level
},
edge from parent/.style = % set style for the connection between parents and children???
{
draw,
edge from parent path = % set the edges for parent node and child node
{(\tikzparentnode.south) -- (\tikzchildnode.north)} % south/north = in the middle at the bottom/top of the node
},
abs/.style = % ??
{edge from parent/.style = {draw = none}} % ??
]
\node{H} % the text of parent node
child[abs] {node{a}}
child {node{s}}
child[abs] {node{a}}
;
\node[xshift = 2cm]{H} % shift all points in this node on the x-axis (to avoid pictures to overlap)
child[abs] {node{a}}
child {node{s}}
child {node{t}}
child[abs] {node{a}}
;
\end{tikzpicture}
\end{document}
这难道不会总是放在H
单词的中间吗?如果我只想H
分支到单词的前两个字符或类似的东西怎么办?
答案1
Tikz 树
这是使用 Tikz 更新的解决方案。我设法解决了一个之前让我选择常规树的特殊问题,即吨从“阿斯塔”造成了与其他字母对齐的问题。
这腹肌风格说abs/.style={edge from parent/.style={draw=none}}
。
基本上,具有此选项的每个子节点都不会显示来自其父节点的边。如您所见,它显示draw=none
以下内容,每当您看到时child[abs]
,该子节点就不会显示该线。
因此:child[abs]
在您不希望出现线条的地方书写,并在[abs]
您希望出现线条的地方保留空白。
顺便一提,腹肌只是缩写缺席的。我只是选择了一个词来表示这个,但是你可以写任何内容作为关键字,除了可能已经存在于 Latex 中的命令可能会产生问题(我认为当这种情况发生时它会抛出一个错误)。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[every node/.style={minimum height=4mm,text height=1mm,text depth=0ex},
level 1/.style={level distance=9mm,sibling distance=2mm},
edge from parent/.style={draw, edge from parent path={(\tikzparentnode.south) -- (\tikzchildnode.north)}},
abs/.style={edge from parent/.style={draw=none}}
]
\node {H}
child[abs] { node {a}}
child { node {s}}
child[abs] { node {a}}
;
\node[xshift=2cm] {H}
child[abs] { node {a}}
child { node {s}}
child { node {t}}
child[abs] { node {a}}
;
\end{tikzpicture}
\end{document}
普通树木
我尝试了另一种方法,使用了语法树。如果你做一棵简单的树,从父节点到其子节点的线条都是等长的。我减少了字母之间的间距,你可以更改该代码以使其看起来更好,但我不知道是否会有什么问题并且看起来很糟糕。
我考虑过使用 Tikz 树,但是您需要输入更多代码(如果您更喜欢这种方法,请告诉我)。
普通树木看起来是这样的:
\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage{qtree}
\begin{document}
\qtreecenterfalse
\Tree [.\raisebox{-.3cm}{H} !\qsetw{-1mm} a !\qsetw{-1mm} s !\qsetw{-1mm} a ] \hskip .5cm
\Tree [.\raisebox{-.3cm}{H} !\qsetw{-1mm} a !\qsetw{-1mm} s !\qsetw{-1mm} t !\qsetw{-1mm} a ]
\end{document}