Eigene Struktur zum steuern, wie oft etwas wiederholt wird Thema ist als GELÖST markiert

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Gast

Eigene Struktur zum steuern, wie oft etwas wiederholt wird

Beitrag 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

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag 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
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Besserwisser

Beitrag 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.

Benutzeravatar
Sepp99
Forum-Meister
Forum-Meister
Beiträge: 1569
Registriert: So 29. Aug 2010, 17:26
Wohnort: Offenhausen/OÖ

Beitrag 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

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag 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.
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag 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}
Bild

Grüße
Dateianhänge
repeat.png
repeat.png (13.18 KiB) 3357 mal betrachtet
Clemens
Paketauthor

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

cgnieder hat geschrieben:Nur der Vollständigkeit halber hier die expl3-Lösung:
...hehehe jetzt fehlt nur noch die Context Lösung...
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

bloodworks hat geschrieben:...hehehe jetzt fehlt nur noch die Context Lösung...
Damit kann ja vielleicht einer von denen dienen? :)
Clemens
Paketauthor

Antworten