)
我正在尝试创建一个认知语言学中的“概念混合”图形。我已经设法使用森林包创建了“一些东西”,但是我不确定如何添加您可以在下面的原始图中找到的线条。另外我的格式似乎仍然有点不对劲(行距等)有人知道如何改进它吗?
这是我的 MWE
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}% tikz
\usetikzlibrary{arrows.meta,decorations.pathmorphing,backgrounds,fit,positioning,shapes.symbols,chains}
\usepackage[]{forest}% linguistic figures
\begin{document}
\begin{figure}
\begin{center}
\begin{forest}
for tree = {
% node style
circle,
draw,
text width = 10.4em, text centered,
inner sep = 1pt,
anchor = north,
/tikz/every label/.append style = {align=left,
font=\sffamily\scriptsize\linespread{0.84}\selectfont},
% tree style
child anchor=north,
edge = {-{Straight Barb[angle=60:2pt 3]}, semithick},
l sep=12mm,
s sep=2mm,
}
% tree body code
[Agens\\ Patiens\\ Ort\\ Tätigkeit\\ Ziel\\ etc.,]
\end{forest}
\\
\begin{forest}
for tree = {
% node style
circle,
draw,
text width = 10.4em, text centered,
inner sep = 1pt,
anchor = north,
/tikz/every label/.append style = {align=left,
font=\sffamily\scriptsize\linespread{0.84}\selectfont},
% tree style
child anchor=north,
edge = {-{Straight Barb[angle=60:2pt 3]}, semithick},
l sep=12mm,
s sep=2mm,
}
% tree body code
[Agens: Metzger\\ Patiens: Tiere\\ Ort: Fleischerei\\ Tätigkeit: präparieren\\ Ziel: verkaufsfertig machen\\ etc.,]
\end{forest}
\hspace{2.5cm}
\begin{forest}
for tree = {
% node style
circle,
draw,
text width = 10.4em, text centered,
inner sep = 1pt,
anchor = north,
/tikz/every label/.append style = {align=left,
font=\sffamily\scriptsize\linespread{0.84}\selectfont},
% tree style
child anchor=north,
edge = {-{Straight Barb[angle=60:2pt 3]}, semithick},
l sep=12mm,
s sep=2mm,
}
% tree body code
[Agens: Chirurg\\ Patiens: Patient\\ Ort: OP-Saal\\ Tätigkeit: operieren\\ Ziel: heilen\\ etc.,]
\end{forest}
\\
\begin{forest}
for tree = {
% node style
circle,
draw,
text width = 10.4em, text centered,
inner sep = 1pt,
anchor = north,
/tikz/every label/.append style = {align=left,
font=\sffamily\scriptsize\linespread{0.84}\selectfont},
% tree style
child anchor=north,
edge = {-{Straight Barb[angle=60:2pt 3]}, semithick},
l sep=12mm,
s sep=2mm,
}
% tree body code
[Agens: Chirurg\\ Patiens: Patient\\ Ort: OP-Saal\\ Tätigkeit: präparieren\\ Ziel: heilen\\ etc.,]
\end{forest}
\end{center}
\end{figure}
\end{document}
这就是我当前的代码:
提前谢谢大家!祝大家周日愉快!
答案1
我认为使用 不会给你带来任何好处forest
。我只会使用tikz
。tikzmark
将每个条目设为tikzmarknode
,然后添加一个tikzpicture
带有选项的附加条目[remember picture, overlay]
以引用回节点。然后随意绘制虚线。这应该可以让你开始:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, tikzmark}
\tikzset{big circle/.style={draw, circle, minimum width=4cm, align=#1, font=\scriptsize}}
\begin{document}
\[
\begin{tikzpicture}[every node/.style={rectangle, outer sep=1mm, minimum height=5mm}, node distance=0cm and 3cm]
\node[big circle=center, label={90:{\textbf{generischer ,,space``}}}](A){
\tikzmarknode{a1}{Agens}\\
\tikzmarknode{a2}{Patiens}\\
\tikzmarknode{a3}{Ort}\\
\tikzmarknode{a4}{Tätigkeit}\\
\tikzmarknode{a5}{Ziel}\\ etc.};
\node[big circle=right, below left=of A](B){
\tikzmarknode{b1}{Agens: Metzger}\\
\tikzmarknode{b2}{Patiens: Tiere}\\
\tikzmarknode{b3}{Ort: Fleischerei}\\
\tikzmarknode{b4}{Tätigkeit: präparieren}\\
\tikzmarknode{b5}{Ziel: verkaufsfertig machen}\\ etc.};
\node[big circle=left, below right=of A](C){
\tikzmarknode{c1}{Agens: Chirurg}\\
\tikzmarknode{c2}{Patiens: Patient}\\
\tikzmarknode{c3}{Ort: OP-Saal}\\
\tikzmarknode{c4}{Tätigkeit: operieren}\\
\tikzmarknode{c5}{Ziel: heilen}\\ etc.};
\node[big circle=center, below right=of B, label={270:\textbf{,,blended space``}}](D){
\tikzmarknode{d1}{Agens: Chirurg}\\
\tikzmarknode{d2}{Patiens: Patient}\\
\tikzmarknode{d3}{Ort: OP-Saal}\\
\tikzmarknode{d4}{Tätigkeit: präparieren}\\
\tikzmarknode{d5}{Ziel: heilen}\\ etc.};
\end{tikzpicture}
\]
\begin{tikzpicture}[remember picture, overlay]
\draw[dashed](a1)--(b1.east)
(a2)--(b2.east)
(a3)--(b3.east)
(a4)--(b4.east)
(a5)--(b5.east)
(a1)--(c1.west)
(a2)--(c2.west)
(a3)--(c3.west)
(a4)--(c4.west)
(a5)--(c5.west);
\draw[very thick, dashed](b1.east)to[out=45, in=135](d1.west)
(c1.west)to[out=135, in=45](d1.east)
(b4.east)to[out=0, in=180](d4.west);
\end{tikzpicture}
\end{document}