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 '18, 18:58

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%


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 '18, 21:44

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

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

(07 Jan '18, 22:08) cis
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×58

gestellte Frage: 07 Jan '18, 18:58

Frage wurde gesehen: 5,189 Mal

zuletzt geändert: 07 Jan '18, 22:08