Variale als Array deklarieren

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Variale als Array deklarieren

von cgnieder » Do 25. Jul 2013, 22:45

Genmutant hat geschrieben:Es gibt da anscheinend ein Problem mit dem optionalen Parameter. Wenn er stattdessen nicht optional ist, geht es.
Befehle mit optionalem Argument sind i.d.R. nicht expandierbar (in einem Expansionskontext), da sie vorausschauen müssen, ob eine eckige Klammer folgt. In einem solchen Fall entfernt hyperref den Befehl und lässt einen Hinweis im log:
Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref)                removing `\meintext' on input line 10.
Definiert man es mit verpflichtendem Argument, dann ist es expandibel (solange die Definition nichts Unexpandierbares enthält).

\documentclass{scrartcl}
\newcommand{\meintext}[1]{b#1b}
\usepackage{hyperref}
\hypersetup{pdftitle={\meintext{\\}}}
\begin{document}
\meintext{c}
\end{document}
liefert folgerichtig:
Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref)                removing `\\' on input line 4.
Der PDF-Titel ist hier »bb«

Grüße

von Genmutant » Do 25. Jul 2013, 20:20

Es gibt sicher auch eine schöne, einfache Lösung für das optionale Parameter, aber ich hab auf die schnelle keine gefunden. Da dürften die erfahreren User aber was kennen vermute ich.

von Crys » Do 25. Jul 2013, 20:01

¡Muchas gracias!
Das ist es Genmutant!

von Genmutant » Do 25. Jul 2013, 19:21

Es gibt da anscheinend ein Problem mit dem optionalen Parameter. Wenn er stattdessen nicht optional ist, geht es.
Geht nicht:
\documentclass[parskip=half]{scrartcl} 

\usepackage{selinput} 
\SelectInputMappings{adieresis={ä},germandbls={ß},Euro={€}} 
\usepackage[ngerman]{babel} 

\newcommand{\meintext}[1][]{b#1b}

\usepackage{hyperref}
\hypersetup{pdftitle={\meintext[a]}}

\begin{document}
\meintext[c]
\end{document}
Geht:
\documentclass[parskip=half]{scrartcl} 

\usepackage{selinput} 
\SelectInputMappings{adieresis={ä},germandbls={ß},Euro={€}} 
\usepackage[ngerman]{babel} 

\newcommand{\meintext}[1]{b#1b}

\usepackage{hyperref}
\hypersetup{pdftitle={\meintext{a}}}

\begin{document}
\meintext{c}
\end{document}
Du darfst den Titel übrigens erst im hypersetup setzen, nicht schon vorher (sagt die Anleitung).

von Crys » Do 25. Jul 2013, 18:56

Wieso funktioniert das nicht:
\documentclass[parskip=half]{scrartcl}

\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß},Euro={€}}
\usepackage[ngerman]{babel}

\newcommand{\meintext}[1][]{Hier steht ein längerer#1 Text, den ich oft im #1Projekt einfügen muss.}

\usepackage[
	pdftitle={\meintext}
]{hyperref}

\begin{document}

\meintext[\\]

\meintext

\end{document}
Den "pdftitle" kann ich nicht mit meiner Variable füttern.

Wenn ich die Variable so baue, wie in esdd's Beispiel, geht es auch nicht.

von Crys » Do 25. Jul 2013, 17:10

Danke euch!

Die Lösung von u_fischer ist die einfachste und genauso möchte ich es haben.
esdd, deins geht auch, nur ist ein klein bisschen komplexer ;)
Mit der Lösung vom Gast kann ich nichts anfangen, da ich keine feste Breite habe und an bestimmten Stellen im Text umbrechen möchte.

von Noch so einer » Do 25. Jul 2013, 09:57

Wenn Du die Breite der Ausgabe beschränkst, dann wird der Text automatisch entsprechend umbrochen:
\documentclass{article}
\usepackage{selinput}
\SelectInputMappings{
  adieresis={ä},
  germandbls={ß},
}
\usepackage{ragged2e}% für das Beispiel mit \RaggedRight
\newcommand*{\meintext}{Hier steht ein etwas längerer Text, den ich in diesem
  Projekt oft einfügen muss.}
\usepackage{parskip}% Nur aus Demo-Gründen

\begin{document}

\meintext

\parbox[tt]{.35\textwidth}{\strut\meintext\strut\par}

\parbox[tt]{.35\textwidth}{\raggedright\strut\meintext\strut\par}

\parbox[tt]{.35\textwidth}{\RaggedRight\strut\meintext\strut\par}

\end{document}
Für komplexere Szenarien sei auf das Paket xstring hingewiesen, das u. a. Strings zerteilen kann.

von u_fischer » Do 25. Jul 2013, 09:28

Wenn du den Text immer an den gleichen Stellen optional trennen willst, würde ich ja einfach ein optionales Argument nutzen:
\documentclass[parskip=half-]{scrartcl}
\newcommand{\meintext}[1][]{Hier steht ein längerer Text,#1 den ich oft im Projekt einfügen müss}

\begin{document} 
\meintext

\meintext[\\]

\end{document}

von esdd » Mi 24. Jul 2013, 21:50

Hallo,

ganz genau verstanden habe ich nicht, was du möchtest. Aber vielleicht hilft dir das Paket datatool:
\documentclass[parskip=half-]{scrartcl}

\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß},Euro={€}}
\usepackage[ngerman]{babel}
\usepackage{microtype}

\usepackage{pgffor}
\usepackage{datatool}
\DTLnewdb{MeinText}
  \foreach \teiltext in {
    {Hier steht ein längerer Text,},
    {den ich oft im Projekt einfügen muss},
    {und nicht immer wieder schreiben möchte.}
  }{%
    \dtlexpandnewvalue
    \DTLnewrow{MeinText}
    \DTLnewdbentry{MeinText}{Inhalt}{\teiltext}
}

\makeatletter
\newcommand\meintext{\DTLforeach{MeinText}{\Inhalt@MeinText=Inhalt}{\Inhalt@MeinText\DTLiflastrow{}{ }}}
\newcommand\meinetextzeilen{\DTLforeach{MeinText}{\Inhalt@MeinText=Inhalt}{\Inhalt@MeinText\DTLiflastrow{}{\\}}}
\makeatother

\begin{document}

\meintext

\meinetextzeilen

\end{document}
Gruß
Elke

Variale als Array deklarieren

von Crys » Mi 24. Jul 2013, 20:40

Ich fange mit einem Beispiel an:
Ich habe einen Text, den ich öfters verwenden muss. Und zwar in verschiedenen Projekt an der selben Stelle, aber als anderer Text.
\newcommand{\meintext}{Hier steht ein längerer Text, den ich oft im Projekt einfügen müss}
Der Text ist aber so lang, dass ich den manchmal in mehrere Zeilen aufteilen muss. Aber an anderen Stellen in einem Stück einfügen will. Wenn ich den Text in mehrere Zeilen aufteile, dann ist es meist eine unterschiedliche Zeilenanzahl.
\newcommand{\meintextEins}{Hier steht ein längerer Text,}
\newcommand{\meintextZwei}{den ich oft im Projekt einfügen müss}

Hier mal ganz eingefügt:
\meintextEins~\meintextZwei

Hier in zwei Zeilen:
\meintextEins\\\meintextZwei
Wie oben dargestellt ist es sehr unpraktisch! Weil ich weiß ja nicht wie viele Teile ich habe.
Wieso kann ich eig keine Zahlen in Variablen verwenden?
\newcommand{\meintext}[1]{Hier steht ein längerer Text,}
\newcommand{\meintext}[2]{den ich oft im Projekt einfügen müss}

Hier mal ganz eingefügt:
\meintext

Hier in zwei Zeilen:
\meintext[1]\\\meintext[2]
Ich weiß das oben genannte geht nicht, aber versthet ihr was ich meine?
Wenn ich die Variable ohne Parameter ausgeben lasse, soll der ganze Text ausgegeben werden. Wenn ich die Variable mit Parameter ausgebe, dann soll nur der jeweilige Teil ausgegeben werden.

Wie kann ich da realisieren?

Nach oben