Ich habe hier eine Methode, eine Matrix bestimmter Größe zu erstellen, die ich später mit nodes fülle (da der Inhalt später berechnet wird). Das funktioniert soweit.

Nun zur Frage: Gibt es vielleicht eine -einfache- Methode, den notwendigen Teil

Öffne in Overleaf
\def\MatrixZeile{ \& \& \\ }    % "Spaltenzahl minus 1"  \&-Zeichen setzen
\def\MatrixZeilen{%         % "Zeilenzahl" Stück eintragen
\MatrixZeile
\MatrixZeile
\MatrixZeile
}%

wegzulassen, also gewissermaßen automatisch zu erstellen. Oder auch weitestgehend abzukürzen, z.B. dass dieser aus Angaben wie \def\nMaxZeile{3} \def\nMaxSpalte{4} oder ähnlich folgt.

alt text

Minimalbeispiel:

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=5mm]{standalone}
\usepackage[german]{babel}

\usepackage{tikz}
 \usetikzlibrary{matrix}

\begin{document}
\def\MatrixZeile{ \& \& \\ }    % "Spaltenzahl minus 1"  \&-Zeichen setzen
\def\MatrixZeilen{%         % "Zeilenzahl" Stück eintragen
\MatrixZeile
\MatrixZeile
\MatrixZeile
}%

\begin{tikzpicture}
\matrix (m) [       % tikz-Matrix
ampersand replacement=\&,
matrix of math nodes, 
nodes in empty cells,
row sep = 1.5em,        
column sep = 1.5em, 
left delimiter  = (, right delimiter  = ), 
]
{%
\MatrixZeilen
};

% Matrix füllen 
\node[align=center] at (m-1-1) {11};
\node[align=center] at (m-1-3) {13};
\node[align=center] at (m-2-3) {23};
\node[align=center] at (m-3-1) {31};
\end{tikzpicture}

\end{document}

gefragt 07 Jan, 12:58

cis's gravatar image

cis
6.1k11135224
Akzeptiert: 70%


Das Problem ist, dass \MatrixZeilen vollständig expandierbar sein muss. Daher kann \MatrixZeilen schonmal kein \foreach enthalten. Am einfachsten kommt man um solche Restriktionen herum, indem man die Schleife in Lua macht, denn \directlua ist immer vollständig expandierbar.

Öffne in Overleaf
\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{tikzpicture}
\matrix (m) [       % tikz-Matrix
ampersand replacement=\&,
matrix of math nodes, 
nodes in empty cells,
row sep = 1.5em,        
column sep = 1.5em, 
left delimiter  = (, right delimiter  = ), 
]
{%
  \directlua{\unexpanded{
    for i = 1,3 do
       for j = 1,3-1 do
          tex.sprint("\\&")
       end
       tex.sprint("\\\\")
    end
  }}
};

% Matrix füllen 
\node[align=center] at (m-1-1) {11};
\node[align=center] at (m-1-3) {13};
\node[align=center] at (m-2-3) {23};
\node[align=center] at (m-3-1) {31};
\end{tikzpicture}

\end{document}
Permanenter link

beantwortet 07 Jan, 15:44

Henri's gravatar image

Henri
12.1k42235

Schon befürchtet. Geht wohl nur mit Lua. :)

(07 Jan, 16:08) cis
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:

×549
×42

Frage gestellt: 07 Jan, 12:58

Frage wurde angeschaut: 128 Mal

Zuletzt aktualisiert: 07 Jan, 16:08