PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Text referenzieren (kopieren)



Spindoctor
25-07-2007, 19:59
Hallo!

Eine kurze Frage:

Ist es mittels eines Befehls möglich, Text, den ich an einer Stelle meines Dokumentes geschrieben habe, an einer anderen Stelle einzufügen?

Also ähnlich wie \label und \ref, nur, dass ich nicht das Kapitel oder die Seitenzahl will, sondern den ganzen Text.

Danke im Vorraus,

Spin

Zoomy
25-07-2007, 20:14
Möglich wäre sowas mit \newcommand{\meintext}{text........}

und dann kannst du mit \meintext dein Text sooft einfügen wie du magst

Spindoctor
25-07-2007, 20:25
stimmt...

is zwar irgendwie mißbrauch der funktion \newcommand, aber funktionieren sollte es schon...

danke schön

Spindoctor
25-07-2007, 20:42
... aber ich muss dann das newcommand bereits im header definieren... das ist etwas suboptimal.

gibt es eine andere Lösung?

localghost
25-07-2007, 20:55
Dann benutze Befehle zur Speicherung und späteren Verwendung von so genannten LR-Boxen.

\newsavebox{\boxname} % keinen Befehlsnamen für boxname verwenden
\sbox{\boxname}{text}
\usebox{\boxname}
Die Befehle können überall dort im Quelltext verwendet werden, wo sie nötig sein sollten. Als Alternative zur zweiten Zeile kann auch die lrbox-Umgebung zum Einsatz kommen.

\begin{lrbox}{\boxname}
text
\end{lrbox}

Spindoctor
25-07-2007, 21:07
danke für den tipp!

Leider hat das auch nicht geholfen...

erstens ist der Text, den ich referenzieren will mehrere Zeilen lang. dadurch, dass er jetzt in einer Box steht, verschwinden die Zeilenunbrüche... nicht so gut...

zweitens hat er sich den Inhalt der Box schon wieder nicht gemerkt... im selben Kapitel funktioniert es, aber in einem späteren Kapitel nicht...

sommerfee
26-07-2007, 08:07
Wieso siehst du das als "Mißbrauch" von \newcommand? Genau dafür ist es doch da, um Token (also Befehle und/oder Text) unter einem Makronamen abzulegen.

Und wieso mußt du das dann schon im Header definieren? Das ist mir nicht ganz klar...

Zum letzten Punkt: Wenn eine Definition woanders nicht mehr greift, ist sie vermutlich nicht global, sondern lokal in einer Gruppe/Umgebung getätigt worden. Dies hat zur Folge, daß die Definition am Ende der Gruppe verschwindet.

Möchte man dies vermeiden, muß die Definition entweder in der obersten Ebene (also nicht innerhalb einer Umgebung, Box, ...) geschehen, oder aber mit Hilfe des Schlüsselwortes \global passieren, also z.B. mit \global\sbox.

Das ist alles, was meine Kristallkugel hergibt, wenn nichts davon passt, würde ich um ein Minimalbeispiel bitten, was das Problem zeigt.

Liebe Grüße,
Axel

Spindoctor
26-07-2007, 09:52
Hallo!

Wahrscheinlich war ich, was "\newcommand" betrifft etwas zu engstirnig. Stimmt eh, dass man es auch für Text, nicht nur für Befehle verwenden kann.

Ich glaube, dass Du recht hast, dass nämlich die Definition nicht global getätigt, und deshalb mein Befehl nicht in andere Kapitel weitergegeben wurde.

Hab gerade [CODE] \global\newcommand{\foo}{blabla} [\CODE] probiert, und in einem anderen Kapitel [CODE] \foo [\CODE] Für Latex war \foo trotzdem eine "Undefined Control Sequence". Wie funktioniert das mit \global genau???

Danke,

Marcel

Spindoctor
26-07-2007, 10:12
\documentclass[a4paper,twoside]{scrreprt}

\usepackage[margin=10pt,font=small,labelfont=bf,position=botto m,aboveskip=0pt,belowskip=10pt,format=plain,indent ion=.5cm]{caption}

\usepackage{ngerman}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}

\chapter{1. Kapitel}
\begin{itemize}
\item \newcommand{\foo}{blabla} \foo
\end{itemize}

\chapter{2. Kapitel}
\foo

\end{document}

Zoomy
26-07-2007, 10:20
Wenn du das newcommand ausserhalb der itemize schreibst dann geht das auch in Kapitel zwei, so ist es genau das was oben beschrieben wurde, dass es nur in der Umgebung bekannt ist

Spindoctor
26-07-2007, 10:29
ok, so weit versteh ich das.

für meine Anwendung würde ich aber gerne jedem Item ein eigenes \newcommand zuordnen.

Ich formuliere am Anfang meiner Diplomarbeit 3 Thesen, die ich in einer Itemize Umgebung unterbringe. Im späteren Verlauf der DA würde ich gerne auf diese Thesen einzeln zugreifen (und nicht immer neuschreiben, um Fehlern vorzubeugen, falls ich die These mal nachträglich änder).

Kann ich eine globale Definition in der Itemize-Umgebung machen?

Zoomy
26-07-2007, 10:36
Kann sein das ich das Problem nicht ganz verstanden habe, aber es ist doch eigentlich egal, ob das \newcommand der These nun kurz vor oder direkt nach der Itemize steht... oder nicht?


\documentclass[a4paper,twoside]{scrreprt}

\usepackage{ngerman}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}

\chapter{1. Kapitel}
\newcommand{\ersteThese}{erste These ist...}
\newcommand{\zweiteThese}{zweite These ist...}
\newcommand{\dritteThese}{dritte These ist...}
\begin{itemize}
\item \ersteThese
\item \zweiteThese
\item \dritteThese
\end{itemize}

\chapter{2. Kapitel}
\begin{itemize}
\item \ersteThese
\end{itemize}

\end{document}

Spindoctor
26-07-2007, 10:57
Du hast recht - so müsste es gehen.

eigentlich eh nicht schwer, nur die Idee muss man haben ;)

danke!

sommerfee
26-07-2007, 16:50
Wie funktioniert das mit \global genau???

Da \global eine TeX-Primitive ist funktioniert sie in der Regel auch nur vor TeX-Primitiven. Bei \newcommand klappt das also nicht, bei \def hingegen schon, also:

\global\newcommand\test{Ein Test!} % <= \global hat keinen Effekt
\global\def\test{Ein Test!} % <= hier aber!

Liebe Grüße,
Axel

Spindoctor
28-07-2007, 15:01
hmm ok... und def ist das TeX-Pendant zu newcommand?

sommerfee
28-07-2007, 18:35
hmm ok... und def ist das TeX-Pendant zu newcommand?

Ja, zu \newcommand und \renewcommand, sozusagen, es wird auch intern von \newcommand und \renewcommand verwendet. Die Syntax ist aber leicht unterschiedlich, so ist z.B.

\newcommand*{\meintext}[2]{Die Argumente sind #1 und #2}

halbwegs identisch mit

\def\meintext#1#2{Die Argumente sind #1 und #2}

führt aber keine Sicherheitsabfrage durch, ob \meintext schon definiert ist oder nicht.

Gruß,
Axel

Spindoctor
29-07-2007, 09:13
alles klar, danke!