Как получить красивые и желаемые пути для изогнутых стрелок внутри таблицы или управлять их конечными точками?

Как получить красивые и желаемые пути для изогнутых стрелок внутри таблицы или управлять их конечными точками?

Я хочу изобразить следующее LaTeX(конечно, так, чтобы это выглядело красивее):

введите описание изображения здесь

На данный момент я достиг следующего.

\documentclass{article}
\usepackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{% <---- BEWARE
            \node[shape=circle,draw,inner sep=2pt] (char) {#1};}}
\usetikzlibrary{tikzmark}

\begin{document}
  \begin{tabular}{cccccccc}
\cline{4-5}
 & & & \multicolumn{1}{|c}{\circled{M1}}\tikzmark{b} & \multicolumn{1}{|c|}{M2} & & & \\
\cline{4-5}
 & & & \multicolumn{1}{|c}{R1} & \multicolumn{1}{|c|}{R2} & & & \\
\cline{4-5}
 & & &  &  & & & \\
\cline{1-2}\cline{4-5}\cline{7-8}
\multicolumn{1}{|c|}{\circled{M1}}\tikzmark{a}&\multicolumn{1}{c|}{M2} & & \multicolumn{1}{|c}{\circled{M1}}\tikzmark{x} & \multicolumn{1}{|c|}{M2} & & \multicolumn{1}{|c}{\circled{M1}}\tikzmark{c} & \multicolumn{1}{|c|}{M2} \\
\cline{1-2}\cline{4-5}\cline{7-8}
\multicolumn{1}{|c|}{R1}&\multicolumn{1}{c|}{R2} & & R1 & R2 & & \multicolumn{1}{|c}{R1} & \multicolumn{1}{|c|}{R2} \\
\cline{1-2}\cline{4-5}\cline{7-8}
 & & &  &  & & & \\
\cline{4-5}
 & & & \multicolumn{1}{|c}{\circled{M1}}\tikzmark{d} & \multicolumn{1}{|c|}{M2} & & & \\
\cline{4-5}
 & & & \multicolumn{1}{|c}{R1} & \multicolumn{1}{|c|}{R2} & & & \\
\cline{4-5}
  \end{tabular}
  \begin{tikzpicture}[overlay, remember picture, yshift=.25\baselineskip, shorten >=.5pt, shorten <=.5pt]
    \draw [->] ({pic cs:a}) [bend right] to ({pic cs:x});
    \draw [->] ({pic cs:b}) [bend right] to ({pic cs:x});
    \draw [->] ({pic cs:c}) [bend right] to ({pic cs:x});
    \draw [->] ({pic cs:d}) [bend right] to ({pic cs:x});
  \end{tikzpicture}
\end{document}

Я не могу контролировать стрелки, и, похоже, они имеют тенденцию заканчиваться в одной определенной точке. Как мне выбрать, где может быть конечная точка? Или, может быть, что-то в LaTeX, что автоматически задает некоторый путь для стрелок, чтобы они пересекали наименьшее количество мест на рисунке?

решение1

Вот версия без tikzmark, которая работает путем назначения разных имен узлам, которые вы уже создаете в \circledкоманде.


\documentclass{article}
%\url{https://tex.stackexchange.com/q/563076/86}
\usepackage{tikz}
\newcommand*\circled[2][char]{\tikz[baseline=(#1.base),remember picture]{% <---- BEWARE
            \node[shape=circle,draw,inner sep=2pt] (#1) {#2};}}

\begin{document}
  \begin{tabular}{cccccccc}
\cline{4-5}
 & & & \multicolumn{1}{|c}{\circled[b]{M1}} & \multicolumn{1}{|c|}{M2} & & & \\
\cline{4-5}
 & & & \multicolumn{1}{|c}{R1} & \multicolumn{1}{|c|}{R2} & & & \\
\cline{4-5}
 & & &  &  & & & \\
\cline{1-2}\cline{4-5}\cline{7-8}
\multicolumn{1}{|c|}{\circled[a]{M1}}&\multicolumn{1}{c|}{M2} & & \multicolumn{1}{|c}{\circled[x]{M1}}& \multicolumn{1}{|c|}{M2} & & \multicolumn{1}{|c}{\circled[c]{M1}} & \multicolumn{1}{|c|}{M2} \\
\cline{1-2}\cline{4-5}\cline{7-8}
\multicolumn{1}{|c|}{R1}&\multicolumn{1}{c|}{R2} & & R1 & R2 & & \multicolumn{1}{|c}{R1} & \multicolumn{1}{|c|}{R2} \\
\cline{1-2}\cline{4-5}\cline{7-8}
 & & &  &  & & & \\
\cline{4-5}
 & & & \multicolumn{1}{|c}{\circled[d]{M1}} & \multicolumn{1}{|c|}{M2} & & & \\
\cline{4-5}
 & & & \multicolumn{1}{|c}{R1} & \multicolumn{1}{|c|}{R2} & & & \\
\cline{4-5}
  \end{tabular}
  \begin{tikzpicture}[overlay, remember picture, yshift=.25\baselineskip, shorten >=.5pt, shorten <=.5pt]
    \draw [->] (a) [bend right] to (x);
    \draw [->] (b) [bend right] to (x);
    \draw [->] (c) [bend right] to (x);
    \draw [->] (d) [bend right] to (x);
  \end{tikzpicture}
\end{document}

сетки со стрелками между ними

Связанный контент