Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

13 Mär '18, 11:08

Henri's gravatar image

Henri
15.7k133943

`\makeatletter` und `\makeatother` müssen außerhalb von `\newcommand` stehen. Innerhalb von `\newcommand` sind die Catcodes schon fixiert und lassen sich nicht mehr ändern. \begin{filecontents*}{permutationen.txt} 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 \end{filecontents*} \documentclass{article} \usepackage{pgfplotstable} % Liste einlesen \pgfplotstableread{permutationen.txt}{\Perm} \pgfplotstablegetcolsof{\Perm} \pgfmathsetmacro{\cols}{\pgfplotsretval-1} \makeatletter \DeclareRobustCommand\PermutationsListeErstellen[2]{% % Kommaseparierte Permutationsliste erstellen: \@ifdefinable#2{\let#2=\empty}% Liste erstellen \foreach \i in {0,...,\cols} {% \pgfplotstablegetelem{#1}{\i}\of{\Perm}% \ifx\empty\PermutationsListe \protected@xdef\PermutationsListe{\pgfplotsretval}% \else \protected@xdef\PermutationsListe{\PermutationsListe,\pgfplotsretval}% \fi }% } \makeatother \begin{document} \PermutationsListeErstellen{1}{\PermutationsListe} \foreach \i in \PermutationsListe { \i } \end{document} [![alt text][1]][1] Deutlich eleganter, kürzer und lesbarer geht das natürlich mit Lua. Als Bonus funktioniert hier auch die von dir gewünschte Syntax (zumindest fast). \begin{filecontents*}{permutationen.txt} 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 \end{filecontents*} \documentclass{article} \usepackage{pgffor} \usepackage{luacode} \begin{luacode*} local perms = {} for line in io.lines("permutationen.txt") do perms[#perms+1] = { string.match(line, "(%d+)%s*(%d+)%s*(%d+)") } end function get_perm(n) tex.sprint(table.concat(perms[n+1],",")) end \end{luacode*} \newcommand\PermutationsListeErstellen[1]{\directlua{get_perm(#1)}} \begin{document} \foreach \i in {\PermutationsListeErstellen{1}} { \i } \end{document} [1]: https://texwelt.de/wissen/upfiles/test_407.pnghttps://texwelt.de/wissen/upfiles/test_407.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

13 Mär '18, 10:57

Henri's gravatar image

Henri
15.7k133943

`\makeatletter` und `\makeatother` müssen außerhalb von `\newcommand` stehen. Innerhalb von `\newcommand` sind die Catcodes schon fixiert und lassen sich nicht mehr ändern. Außerdem kannst du `\PermutationsListe` nur einmal reservieren, also mach das auch außerhalb. ändern. \begin{filecontents*}{permutationen.txt} 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 \end{filecontents*} %\documentclass[]{article} \documentclass[border=5mm, varwidth]{standalone} %\usepackage{sagetex} \usepackage{tikz} \usetikzlibrary{calc} \usepackage{amsmath} \documentclass{article} \usepackage{pgfplotstable} \begin{document} % Liste einlesen \pgfplotstableread{permutationen.txt}{\Perm} \pgfplotstablegetcolsof{\Perm} \pgfmathsetmacro{\cols}{\pgfplotsretval-1} \makeatletter \newcommand{\PermutationsListe}{}% Name reservieren \DeclareRobustCommand\PermutationsListeErstellen[1]{% \DeclareRobustCommand\PermutationsListeErstellen[2]{% % Kommaseparierte Permutationsliste erstellen: \let\PermutationsListe=\empty% \@ifdefinable#2{\let#2=\empty}% Liste erstellen \foreach \i in {0,...,\cols} {% \pgfplotstablegetelem{#1}{\i}\of{\Perm}% \ifx\empty\PermutationsListe \protected@xdef\PermutationsListe{\pgfplotsretval}% \else \protected@xdef\PermutationsListe{\PermutationsListe,\pgfplotsretval}% \fi }% \PermutationsListe }% } \makeatother Anzeigen: \PermutationsListeErstellen{0} \begin{document} \PermutationsListeErstellen{1}{\PermutationsListe} \foreach \i in \PermutationsListe { \i } \end{document} [![alt text][1]][1] [1]: https://texwelt.de/wissen/upfiles/test_407.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

13 Mär '18, 01:29

Henri's gravatar image

Henri
15.7k133943