Struktur-Problem

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


projoe
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Fr 24. Jun 2011, 16:48

Struktur-Problem

Beitrag von projoe »

Ich habe in einem längeren Dokument eine Vielzahl von Aufgaben und will im Anhang die Lösungen haben. Natürlich kann ich mit label darauf referenzieren, aber das ist unkomfortabel. Ich will schreiben können \ag{Geben Sie $\pi$ auf zwei Dezimalen an}{3.14} und dann soll im Text die Aufgabe erscheinen und in einem späteren Kapitel Lösungen dann 3.14

Das hat den Vorteil, dass wenn ich Aufgaben austausche, dann muss ich nur an einer Stelle im tex-File ändern und nicht an zwei. Außerdem nerven 1000 Referenzen.

Geht das, oder widerspricht das der LaTeX-Philosophie?
projoe

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Das geht. Es gibt diverse Pakete dazu (examen ist eins davon glaube ich) Ich habe auch grad eins dafür in der mache, das ist aber lange nicht so, dass man es benutzen könnte.
Der Philosophie widerspricht es nicht.

Siehe auch den TeX Catalogue

projoe
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Fr 24. Jun 2011, 16:48

Beitrag von projoe »

Also es gibt ein Paket exam. Da bekomme ich dann Befehle für Multiple Choice, Lücken für Antworttext usw. Das brauche ich alles nicht. Und ich muss eine eigene documentclass benutzen, will aber article.

Das scheint mir nicht das zu sein, was ich suche.

Ich will Passagen im tex-File verteilt schreiben, die beim compilieren nur aufgesammelt werden und dann am Ende mit einem Befehl ausgegeben werden können. Mir scheint der Befehl
\def\textstring{Hello}

blabla

\edef\textstring{\textstring{} 
world
}
in die richtige Richtung zu gehen. Dann kann ich später mit \textstring alles ausgeben. Aber dann kann ich nicht {\bf world} machen und auch nicht \begin{array} ...\end{array} und solche Sachen.

Was ist die Lösung?
projoe

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Du könntest auch alles in eine (Hilfs-)Datei schreiben und diese dann am Ende auslesen. Schau mal hier zum Beispiel. Ansonsten ist auch Google mit „latex write file“ o. ä. dein Freund.
Hilft dir das?

Der Ansatz wäre also ein eigener Befehl mit zwei Argumenten. Das erste wird einfach ausgegeben, das zweite wird mit \write<Dateibefehl>{Text} in eine externe Datei* geschrieben, die am Ende des Dokuments mit \input{<Dateiname mit Endung>} wieder eingelesen und ausgeben werden kann.

Es wundert mich allerdings, dass es defür kein Paket gibt …

________
* Kleiner Hinweis für die Dateinamen:
Die Hilfsdateien, die TeX so erstellt, haben ja immer den gleichen Namen, wie die Hauptdatei und werden anhand ihrer Endung (tex, toc, aux, log, …) unterschieden, das würde ich dann auch hier vorschlagen. An den namen der Datei ohne Endung kommst du mit \jobname und die Endung kannst du dir ausdenken.
Man könnte den Namen beispielsweise als \jobname.ant definieren. Wie die Endung lautet, ist egal sie muss nur eindeutig sein (\jobname.aux wäre also keine gute Idee, weil dann die TeX-eigne Hilfsdatei überschrieben würde).

projoe
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Fr 24. Jun 2011, 16:48

Beitrag von projoe »

Vielen Dank für die Antwort, das ist das, was ich suche.

Nur klappt es noch nicht so ganz. In das File wird irgendwas kryptisches geschrieben.

Z.B.
\documentclass[german]{article}
\newwrite\tempfile
\newcounter{AgNummer} \setcounter{AgNummer}{1}
\newcommand{\Aufgabe}[2]
{ {\bf Ag \arabic{AgNummer}:} #1
\immediate\write\tempfile{{\bf Ag \arabic{AgNummer}:} #2}
\stepcounter{AgNummer}
}

\newwrite\tempfile
\begin{document}
\immediate\openout\tempfile=lists.tex

\Aufgabe{Geben Sie pi auf zwei Dezimalen genau an.}{{\bf Lösung} $\frac{3.14}{1}$}

\immediate\closeout\tempfile

Lösungen der Aufgaben:
%\input{lists}
\end{document}
Und ist ja auch irgendwie klar, dass z.B. der Befehl \arabic{AgNummer} in der Definition von \Aufgabe unlogisch ist: Will ich, dass da Zeichen für Zeichen \arabic{AgNummer} steht oder will ich, dass die Zahl reingeschrieben wird.

Wie kann ich dafür sorgen, dass genau meine angegebenen Zeichen im File landen?

Wie kann ich dafür sorgen, dass z.B. der Ausdruck \arabic{AgNummer} ausgewertet wird und das dann ins File geschrieben wird.

Verstehst du, was ich meine? Leider bin ich aus den Google-Treffern nicht so schlau geworden, hab's echt probiert.
projoe

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Ist auch nicht so einfach, wie ich feststellen musste …

Das Problem ist, das \write seinen Inhalt vollständig expandiren will, was nicht unbedingt geht, deswegen muss man einige Makros mit \string schützen. Damit die Antwort auch unexpandiert in die Datei geschrieben wird, verwende ich \unexpanded{}.
Damit sollte es gehen.
\documentclass[german]{article} 

\usepackage[latin1]{inputenc}
\usepackage{amsmath}% nur zum Testen

\newwrite\tempfile 
\immediate\openout\tempfile=\jobname.lsg
\newcounter{AgNummer} \setcounter{AgNummer}{1}
\newcommand{\Loesungen}{%
	\immediate\closeout\tempfile 
	\section*{Lösungen}
	\input{\jobname.lsg}
}
\makeatletter
\newcommand{\Aufgabe}[2]{%
	\textbf{Ag \arabic{AgNummer}:} #1
	\immediate\write\tempfile{%
		\string\par\string\noindent%
		\string\textbf{Ag \arabic{AgNummer} (Lsg.):}
		\unexpanded{#2} %
	} 
	\stepcounter{AgNummer} 
}
\makeatother


%\newwrite\tempfile% ist doch oben schon ;-)
\begin{document} 
 

\Aufgabe{Geben Sie $\pi$ auf zwei Dezimalen genau an.}{$\pi\approx3.14$} 

\Aufgabe{Wie lautet die 2. binomische Formel?}{%
	Die zweite binomische Formel lautet
	\begin{equation*}
		(a+b)^2 = a^2 +2ab +b^2.
	\end{equation*}
}

\Aufgabe{%
	Lösen Sie das Integral
	\begin{equation*}
		\int_0^1 x^2 \mathrm{d}x.
	\end{equation*}%
}{%
	\begin{align*}
		\int_0^1 x^2 \mathrm{d}x &= \left. \frac{1}{2}x^2\right|_0^1\\
		&= \frac{1^2}{2}-\frac{0^2}{2}\\
		&= \frac{1}{2}
	\end{align*}
}



\Loesungen
\end{document}
Übrigens sollte man {\bf Text} mit LaTeX nicht Benutzen (Sihe l2tabu.pdf)!

Viele Grüße
Tobi

projoe
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Fr 24. Jun 2011, 16:48

Beitrag von projoe »

Super, jetzt läuft alles einwandfrei. Danke.
projoe

Benutzeravatar
localghost
Forum-Meister
Forum-Meister
Beiträge: 826
Registriert: Di 8. Jul 2008, 15:40
Wohnort: Braunschweig

Redundant

Beitrag von localghost »

Schön hin gebastelt. Aber warum das Rad neu erfinden? Für so etwas gibt es doch exercise oder probsoln.


Thorsten
TeX und LaTeX, Fragen und Antworten – TeXwelt

¹ Es tut mir Leid. Meine Antworten sind begrenzt. Sie müssen die richtigen Fragen stellen.
² System: TeX Live 2024, TeXworks

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Wusste ich doch, das es da Pakete gibt. Hab’ ich auch gesagt und bin dann davon ausgegangen, dass der Frage erstmal recherchiert … :?

Antworten