我正在使用 TikZ-UML 来说明科学论文中的一些概念。它做得很好,但我遇到了一些空间问题(因为所有科学论文都有页数限制)。我已经设法根据概念中的位置适当缩小了我的图形,但对象内部有很多空间丢失。
考虑一下图中对象名称与线条之间的垂直间距。例如,“A”的顶部与其上方的线条之间有 4 pt 的间距,“A”下方也有 6 pt 的间距。
有没有什么办法,能够控制这个空间,从而让我的身形进一步缩小?
下面是使用以下方法制作的对象模型的最小示例tikz-uml
:
\documentclass[a4paper]{article}
\usepackage{tikz-uml}
\begin{document}
\begin{center}
\begin{tikzpicture}
\umlsimpleclass{A}
\umlsimpleclass[x=2]{B}
\umlassoc{A}{B}
\end{tikzpicture}
\end{center}
\end{document}
通过阅读tikzuml.sty
,我看到了一行:
\tikzstyle{tikzuml simpleclass style}=[rectangle, minimum height=2em, node distance=2em]%
我将最小高度设置为 1em。这会改变“A”和“B”上方丢失的空间,但不会影响下方的空间
非常感谢。
答案1
对于所讨论的节点,有两三处需要修改。(\umlclass
最后只生成一个\node
。)首先,minimum height
被设置为的2em
,tikz-uml
其次是inner ysep
,它确定从节点内容到节点边界的垂直距离。
例如,如果你这样做
\umlsimpleclass[x=2,minimum height=0pt,inner ysep=0pt]{A}
您会在右侧看到输出,而默认输出在左侧:
由于内容设置在 a 中,因此仍有一些空间tabular
,即您遇到的情况如下
\node [inner ysep=0pt,draw] {\begin{tabular}{c}A\end{tabular}};
另一个要使用的参数是text depth
。请注意带有降部的字母(如 y、g、j),如果text depth
太小,字母可能会伸出节点。
您可以修改样式tikzuml simpleclass style
,tikzuml class style
例如
\tikzset{
tikzuml class style/.append style={minimum height=0pt,inner ysep=0pt,text depth=2pt}
}
或者创建您自己的风格,并将其添加到您想要的节点。
左边是默认样式,中间是修改tikz-uml
样式,右边是自定义样式。它们按以下代码中的顺序出现。
\documentclass[border=10pt]{standalone}
\usepackage{tikz-uml}
\tikzset{
reduce height/.style={
minimum height=0pt,
inner ysep=#1,
text depth=2pt
},
reduce height/.default={0pt}
}
\begin{document}
\begin{tikzpicture}
\umlsimpleclass[x=-2]{Ay}
\umlclass[x=-2,y=-2]{B}{foo}{barg}
\umlclass[x=-2,y=-4]{B}{}{}
\begin{scope}[
% instead of a scope environment, you can add these style modifications
% in the options to a tikzpicture, or in \tikzset{} in the preamble
tikzuml simpleclass style/.append style={minimum height=0pt,inner sep=0pt},
tikzuml class style/.append style={minimum height=0pt,inner sep=0pt},
]
\umlsimpleclass{Ay}
\umlclass[y=-2]{B}{foo}{barg}
\umlclass[y=-4]{B}{}{}
\end{scope}
\umlsimpleclass[x=2,reduce height]{Ay}
\umlclass[y=-2,x=2,reduce height=1pt]{B}{foo}{barg}
\umlclass[y=-4,x=2,reduce height]{B}{}{}
\end{tikzpicture}
\end{document}