Seite 1 von 1
Eigene Struktur zum steuern, wie oft etwas wiederholt wird
Verfasst: Fr 11. Mai 2012, 14:00
von Gast
Hallo,
ich würde gerne eine eigentilch simple eigendefinition erstellen. Ich hätte gerne ein eigene Struktur, über die ich steuern kann, wie häufig ein zeichen wiederholt ausgegeben werden soll.
Bsp:
\mycommand[14]{testzeichen }
In diesem Beispiel hätte ich dann gerne die ausgabe von testzeichen testzeichen testzeichen testzeichen ... testzeichen 14 mal.
Leider habe ich bisher noch nicht den richtigen Ansatz gefunden. Habt ihr mit dafür eine Lösung oder einen Tip?
Danke
Verfasst: Fr 11. Mai 2012, 14:22
von bloodworks
Das ist relativ simpel:
\documentclass{report}
\newcommand\mycom[2][\mydefault]{%
\def\mydefault{1}%
\newcount\n
\n=0
\loop #2
\advance\n by 1
\ifnum \n < #1\repeat
}
\begin{document}
\mycom[10]{y}
\end{document}
Ich empfehle dazu texbytopic
Verfasst: Fr 11. Mai 2012, 14:47
von Besserwisser
Weder \newcount (das ist ein plainTeX-Befehl) noch \newcounter (die LaTeX-Anweisung zum Anfordern eines neuen LaTeX-Zählers) sollten innerhalb der Anweisung stehen. Dabei wird nämlich dann bei jedem Aufruf der Anweisung ein neues Zählerregister belegt aber nie wieder frei gegeben. \newcount und \newcounter gehören deshalb (wie \newlength, \newskip etc.) global, außerhalb der Definition der Anweisung \mycom verwendet.
BTW: Das ifthen-Paket bietet ebenfalls Schleifenkonstrukte wie \while. Es gibt auch ein Paket, das für Zähler verwendet werden kann, die lediglich lokal benötigt werden. Ich habe nur vergessen wie das heißt, weil ich in diesen Fällen einfach einen der temporär nutzbaren Zähler des LaTeX-Kern verwende, beispielsweise \@tempcnta.
Verfasst: Fr 11. Mai 2012, 14:50
von Sepp99
Workaround mit Schleife:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{ifthen}
\newcounter{ctra}
\newcommand*{\schleife}[2]{%
\setcounter{ctra}{0}
\whiledo {\value{ctra} < #2}%
{%
\large #1%
\stepcounter {ctra}%
}}
\begin{document}
\schleife{A}{5}
\schleife{G}{15}
\end{document}
Dazu
http://www.matthiaspospiech.de/blog/200 ... if-abfrage
Gruß, Sepp.-
EDIT: etwas zu spät
Verfasst: Fr 11. Mai 2012, 16:37
von bloodworks
Besserwisser hat geschrieben:Weder \newcount (das ist ein plainTeX-Befehl) noch \newcounter (die LaTeX-Anweisung zum Anfordern eines neuen LaTeX-Zählers) sollten innerhalb der Anweisung stehen. Dabei wird nämlich dann bei jedem Aufruf der Anweisung ein neues Zählerregister belegt aber nie wieder frei gegeben. \newcount und \newcounter gehören deshalb (wie \newlength, \newskip etc.) global, außerhalb der Definition der Anweisung \mycom verwendet.
BTW: Das ifthen-Paket bietet ebenfalls Schleifenkonstrukte wie \while. Es gibt auch ein Paket, das für Zähler verwendet werden kann, die lediglich lokal benötigt werden. Ich habe nur vergessen wie das heißt, weil ich in diesen Fällen einfach einen der temporär nutzbaren Zähler des LaTeX-Kern verwende, beispielsweise \@tempcnta.
Zu 1. ja -> schlamperrei
Zu BTW: Ja das sollte aber in diesem Fall egal sein und um etwas zu zeigen ist es sicher besser auch zu zeigen wo der Befehl (oder Zähler) herkommt.
Verfasst: Fr 11. Mai 2012, 18:51
von cgnieder
Nur der Vollständigkeit halber hier die expl3-Lösung:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \myrepeat { O{1}m }
{
\int_zero:N \l_tmpa_int
% Schleife nur bis zum vorletzten Mal, damit wir ein Leerzeichen nur zwischen
% nicht aber nach der letzten Ausgabe haben
\int_while_do:nNnn { \l_tmpa_int } < { #1 - 1 }
{ \int_incr:N \l_tmpa_int #2 \tl_use:N \c_space_tl }
#2
}
\ExplSyntaxOff
\begin{document}
\myrepeat[4]{test}!
\myrepeat{nur einmal}?
\myrepeat[100]{oft}!
\end{document}
Grüße
Verfasst: Fr 11. Mai 2012, 22:19
von bloodworks
cgnieder hat geschrieben:Nur der Vollständigkeit halber hier die expl3-Lösung:
...hehehe jetzt fehlt nur noch die Context Lösung...
Verfasst: Fr 11. Mai 2012, 22:30
von cgnieder
bloodworks hat geschrieben:...hehehe jetzt fehlt nur noch die Context Lösung...
Damit kann ja vielleicht
einer von denen dienen?
