In mathtools.sty heißen diese Klammern \lgroup und \rgroup. Kann man solche Klammern auch in TikZ haben?

IST:

alt text

SOLL:

alt text

Öffne in Overleaf
\documentclass[varwidth, margin=5mm]{standalone}
%\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{amsmath, relsize, tikz}

 \usetikzlibrary{matrix, decorations.pathreplacing}
\begin{document}

\begin{tikzpicture}
\matrix (m) [matrix of math nodes,
  inner sep=0pt, column sep=0.5em, %row sep=0.1em,
  nodes={inner sep=0.25em,text width=1em,align=center}
  ]
{
a_{1}  &  b_{1} &  c_{1} \\
a_{2}  &  b_{2} &  c_{2}\\
a_{3}  &  b_{3} &  c_{3}\\
};

%Klammern, Strich
%\node[red] at (m-1-2.north east){+};
\draw[decorate,decoration=brace](m-3-1.south west) -- (m-1-1.north west) ;
\draw[decorate,decoration=brace]  (m-1-3.north east) -- (m-3-3.south east);
\draw[]  (m-1-3.north west) -- (m-3-3.south west);
\end{tikzpicture}

\end{document}

gefragt 18 Apr, 14:03

cis's gravatar image

cis
5.8k10105198
Akzeptiert: 69%

bearbeitet 18 Apr, 15:04

saputello's gravatar image

saputello
19.6k22556


Ich gehe einmal davon aus, dass Du aus irgendwelchen Gründen – beispielsweise weil Du die Matrix außerhalb des geklammerten Teils fortsetzen willst – die von @esdd vorgeschlagene Triviallösung:

Öffne in Overleaf
\documentclass[varwidth, margin=5mm]{standalone}
%\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{amsmath, relsize, tikz}

\usetikzlibrary{matrix}
\begin{document}

\begin{tikzpicture}
\matrix (m) [matrix of math nodes,
  inner sep=0pt, column sep=0.5em, %row sep=0.1em,
  nodes={inner sep=0.25em,text width=1em,align=center},
  left delimiter=\lgroup,right delimiter=\rgroup
  ]
{
a_{1}  &  b_{1} &  c_{1} \\
a_{2}  &  b_{2} &  c_{2}\\
a_{3}  &  b_{3} &  c_{3}\\
};

\draw[]  (m-1-3.north west) -- (m-3-3.south west);
\end{tikzpicture}

\end{document}

mit dem Ergebnis

Triviallösung

nicht verwenden kannst oder willst.

Du kannst mit der fit Bibliothek einfach \lgroup und \rgroup verwenden:

Öffne in Overleaf
\documentclass[varwidth, margin=5mm]{standalone}
%\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{amsmath, relsize, tikz}

\usetikzlibrary{matrix,fit}

\begin{document}

\begin{tikzpicture}
\matrix (m) [matrix of math nodes,
  inner sep=0pt, column sep=0.5em, %row sep=0.1em,
  nodes={inner sep=0.25em,text width=1em,align=center}
  ]
{
a_{1}  &  b_{1} &  c_{1} \\
a_{2}  &  b_{2} &  c_{2}\\
a_{3}  &  b_{3} &  c_{3}\\
};

\node[fit=(m-1-1.north west) (m-3-1.south west),inner sep=0pt,left delimiter={\lgroup}]{};
\node[fit=(m-1-3.north east) (m-3-3.south east),inner sep=0pt,right delimiter={\rgroup}]{};

\draw[]  (m-1-3.north west) -- (m-3-3.south west);
\end{tikzpicture}

\end{document}

matrix mit klzzwxh:0005group und klzzwxh:0006group

Die Positionen, die sich bei fit ergeben, sind natürlich vom Inhalt der Matrix abhängig, ggf. kann man hier beispielsweise mit relativen Verschiebungen gegenüber den Matrixzellengrenzen oder mit inner vsep Korrekturen herbeiführen. Einfacher ist in vielen Fällen, direkt in die Matrix passende Stützen wie \mathstrut einzufügen:

Öffne in Overleaf
\documentclass[varwidth, margin=5mm]{standalone}
%\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{amsmath, relsize, tikz}

\usetikzlibrary{matrix,fit}

\begin{document}

\begin{tikzpicture}
\matrix (m) [matrix of math nodes,
  inner sep=0pt, column sep=0.5em, %row sep=0.1em,
  nodes={inner sep=0.25em,text width=1em,align=center}
  ]
{
\smash[d]{\mathstrut} a_{1}  &  b_{1} &  c_{1}\smash[d]{\mathstrut} \\
a_{2}  &  b_{2} &  c_{2}\\
\smash[t]{\mathstrut} a_{3}  &  b_{3} &  c_{3}\smash[t]{\mathstrut} \\
};

\node[fit=(m-1-1.north west) (m-3-1.south west),inner sep=0pt,left delimiter={\lgroup}]{};
\node[fit=(m-1-3.north east) (m-3-3.south east),inner sep=0pt,right delimiter={\rgroup}]{};

\draw[]  (m-1-3.north west) -- (m-3-3.south west);
\end{tikzpicture}

\end{document}

mit klzzwxh:0011athstrut

Permanenter link

beantwortet 18 Apr, 14:47

saputello's gravatar image

saputello
19.6k22556

bearbeitet 19 Apr, 02:48

2

Die fit Bibliothek braucht man eigentlich nicht. Es geht auch direkt \matrix[...,left delimiter=\lgroup,right delimiter=\rgroup]{...};. Das hat außerdem den Vorteil, dass die Klammern links und rechts unabhängig vom Inhalt der einzelnen Zellen die gleiche Größe haben.

(18 Apr, 18:28) esdd

@esdd Ich bin aufgrund cis letzter Frage davon ausgegangen, dass er in Wirklichkeit mit einer größeren Matrix arbeiten will und nur einen Teil der Zeilen und Spalten mit den Klammern umschließen möchte. In der Tat hätte ich darauf aber hinweisen sollen. Danke für den Einwand.

(19 Apr, 02:26) saputello

Richtig, habe ich gerade auch festgestellt. left delimiter=\lgroup,right delimiter=\rgroup könnte ausreichen. Allerdings ist es mit fit ganz gut, da ich teilweise über bestimmte Zellen Klammern spannen muss.

Das einzige was mich noch stört ist, das die group-Klammern so klobig sind. Die müsste ich etwa auf \pgflinewidth setzen.

(19 Apr, 16:53) cis

Wenn Du in er Tat eine decoration vorziehst, also keine echten Klammern von amsmath haben willst, so kannst Du recht einfach selbst eine definieren. Ich habe dazu die Definition der brace decoration aus pgflibrarydecorations.pathreplacing.code.tex kopiert und die geschwungene Kurve für die Spitze in der Mitte der geschweiften Klammern entfernt. Dadurch ergibt sich eine (mehr oder weniger) eckige Klammer mit abgerundeten Enden. Dem Ganzen habe ich den Namen rbracket (für rounded bracket) gegeben. Der Name ist willkürlich. Der Name des Anfangszustandes ist ebenfalls willkürlich, muss aber natürlich mit der Definition eines Zustandes (\state) in der Definition der decoration übereinstimmen. Ich habe es hier bei brace belassen. Man hätte den Zustand aber auch in initial oder rbracket ändern können.

Öffne in Overleaf
\documentclass[varwidth, margin=5mm]{standalone}
%\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{amsmath, relsize, tikz}

\usetikzlibrary{matrix, decorations.pathreplacing}

% New rbracket decoration (brackets with round sends)
%
% Parameters: \pgfdecorationsegmentamplitude
\pgfdeclaredecoration{rbracket}{brace}
{
  \state{brace}[width=+\pgfdecoratedremainingdistance,next state=final]
  {
    \pgfpathmoveto{\pgfpointorigin}
    \pgfpathcurveto
    {\pgfqpoint{.15\pgfdecorationsegmentamplitude}{.3\pgfdecorationsegmentamplitude}}
    {\pgfqpoint{.5\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
    {\pgfqpoint{\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
    {
      \pgftransformxshift{+\pgfdecorationsegmentaspect\pgfdecoratedremainingdistance}
      \pgfpathlineto{\pgfqpoint{-\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
    }
    {
      \pgftransformxshift{+\pgfdecoratedremainingdistance}
      \pgfpathlineto{\pgfqpoint{-\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
      \pgfpathcurveto
      {\pgfqpoint{-.5\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
      {\pgfqpoint{-.15\pgfdecorationsegmentamplitude}{.3\pgfdecorationsegmentamplitude}}
      {\pgfqpoint{0pt}{0pt}}
    }
  }
  \state{final}
  {}
}

\begin{document}

\begin{tikzpicture}
\matrix (m) [matrix of math nodes,
  inner sep=0pt, column sep=0.5em, %row sep=0.1em,
  nodes={inner sep=0.25em,text width=1em,align=center}
  ]
{
a_{1}  &  b_{1} &  c_{1} \\
a_{2}  &  b_{2} &  c_{2}\\
a_{3}  &  b_{3} &  c_{3}\\
};

%Klammern, Strich
%\node[red] at (m-1-2.north east){+};
\draw[decorate,decoration=rbracket](m-3-1.south west) -- (m-1-1.north west) ;
\draw[decorate,decoration=rbracket](m-1-3.north east) -- (m-3-3.south east);
\draw[]  (m-1-3.north west) -- (m-3-3.south west);
\end{tikzpicture}

\end{document}

alt text

Sicher könnte man die Definition der decoration weiter optimieren (man braucht ja eigentlich nur zwei kleine Bögen und eine Linie dazwischen). Aber nicht zuletzt, weil in der Frage die brace decoration angesprochen wurde, wollte ich ganz bewusst zeigen, wie man diese abwandeln kann.

Permanenter link

beantwortet 20 Apr, 07:34

saputello's gravatar image

saputello
19.6k22556

bearbeitet 20 Apr, 07:38

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×524
×14
×8

Frage gestellt: 18 Apr, 14:03

Frage wurde angeschaut: 366 Mal

Zuletzt aktualisiert: 20 Apr, 07:38