Titel und Untertitel im Fließtext einfügen

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


Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 65
Registriert: Do 4. Jan 2018, 02:32

Beitrag von Bebbi »

Hallo,

ich hatte mehrere Einleitungen angelesen und mich dann für eine entschieden an der ich mich nun entlang arbeiten. Erst alles komplett theoretisch lesen, kann ich nicht. Ich muss da parallel probieren, damit ich noch folgen kann.

In dem aktuellen Dokument nutzte ich nicht \maketitle. Das würde keinen Sinn machen. Da ich - das war mir nicht klar - \title etc. offensichtlich nicht zwingend definieren muss, ginge es hier also ohne. Meine Frage zielt also nun darauf ab, wie ich damit umgehen würde, wenn ich \maketitle nutze.

Aber ich befürchte, ich kann mich nicht verständlich genug ausdrücken, was ich will.
Anonymous hat geschrieben: Außerdem kann man einmal definierte Befehle natürlich auch im Argument von anderen Befehlen verwenden.
Und wie funktioniert das in diesem Fall, dass \subtitle Argument von \mysubtitle wird? Das ging ja nicht bei mir, was Anlass dieser Diskussion war.

Danke für die Geduld.

Grüße

Bebbi

Gast

Beitrag von Gast »

Bebbi hat geschrieben:ich dachte \subtitle wäre ein feststehender Befehl?
Naja, die Standardklassen (article, book, ...) kennen \subtitle nicht. Selbst wenn wir vermutet hätten, dass Du \subtitle ohne "s" meinst, könnten wir nicht sicher sein, wie der Befehl definiert ist und was er macht. Ich gehe zwar davon aus, dass die meisten Klassen oder Pakete, die ihn definieren, das etwa so machen wie KOMA-Script, aber garantieren kann man das nicht. Wenn Du uns zumindest verraten hättest, dass Du eine KOMA-Klasse nutzt, hätten wir uns diese Nachfrage erspart. Natürlich weiß man als Nutzer nicht unbedingt, welche Dinge wo und von wem definiert sind, aber daher ist ein Minimalbeispiel ja so hilfreich. Dann wissen alle, worüber sie reden.

Wenn man Bartmans Vorschläge richtig verwendet, muss man doch jeden Titel nur einmal angeben
\documentclass{scrbook}

\newcommand{\mytitle}{Mein toller Buchtitel}
\newcommand{\mysubtitle}{Mein prägender Untertitel}
\title{\mytitle}
\subtitle{\mysubtitle}

\begin{document}
\maketitle

Wie schon der \mysubtitle{} sagt, …
\end{document}
\documentclass{scrbook}


\title{Mein toller Buchtitel}
\subtitle{Mein prägender Untertitel}

\makeatletter
\let\mytitle\@title
\let\mysubtitle\@subtitle
\makeatother

\begin{document}
\maketitle

Wie schon der \mysubtitle{} sagt, …
\end{document}
Egal, ob man \maketitle oder titlepage verwendet. Wichtig für das Verständnis ist nur, dass \title und \subtitle nach erfolgreicher Anwendung nicht selbst den Text des Titels bzw. Untertitels beinhalten. Vielmehr schreiben diese Befehle die Titel in ein internes Makro, das dann abgefragt werden kann. Bartmans zweite Lösung macht diese internen Makros auch für den Nutzer zugänglich. Die erste Lösung behilft sich, indem sie schon \title und \subtitle mit einem Makro, das die eigentliche Master-Rolle übernimmt, füttert.
Bebbi hat geschrieben:Ich meinte es so, dass man mehr lernt, wenn man selber auf die Lösung kommt und ich dachte, eine allg. Antwort macht weniger Aufwand.
Mit ersterem magst Du recht haben, die Frage ist aber immer auch, wie man auf welche Lösung kommt. Die offensichtliche Lösung ist nicht immer die eleganteste oder korrekteste Lösung.

Das Problem bei allgemeinen Antworten ist, dass sich fast immer herausstellt, dass nicht wirklich "allgemein" gefragt wird, sondern dass die Fragenden eigentlich einen konkreten Fall im Kopf haben. Das ist natürlich nicht verwerflich, aber ich finde es immer etwas unfair, sich mit einem Hinweis auf eine allgemeine Frage vor einem Minimalbeispiel zu drücken und dann mit einem "es geht nicht" zu antworten. Ganz abgesehen davon, ist nicht immer klar, was eine allgemeine Lösung überhaupt ist. Schon die Wahl der Dokumentenklasse kann Einflüsse auf die Lösung haben - ganz abgesehen von der Wahl der Pakete für bestimmte Aufgaben oder die Auswahl einer Methode, die Titelseite zu setzen (\maketitle vs. titlepage). Vergleiche auch die Sache mit \subtitle. Siehe auch https://tex.meta.stackexchange.com/q/6255/35864 Das TeX-Ökosystem ist so gewachsen, dass es im Allgemeinen verdammt viele Möglichkeiten gibt, eine bestimme Situation herbeizuführen - aber nicht für jede dieser Möglichkeiten ist die beste Lösung dieselbe.

Ich schließe mich meinem Vorredner an, eine ordentliche Einführung in LaTeX zu lesen, kann selten verkehrt sein. Wenn die Anleitung etwas in die Tiefe geht, kann sie Dir auch erklären, warum \newcommand{\mytitle}{\titel} nicht funktioniert.

Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 65
Registriert: Do 4. Jan 2018, 02:32

Beitrag von Bebbi »

Hallo,

ok. Ich werde dann versuchen, immer auch ein Bsp. anzugeben, auch wenn für mich das eine generelle Frage ist.

Dem Titel nach geht es in meiner Einleitung darum, auch mit KOMA-Script zu arbeiten. Aber bewusst habe ich das noch nicht eingebunden. Nur beim aus dem Buch übernommene Code zu den Kopfzeilen taucht
\KOMAoptions{headsepline=0.8pt,footsepline}
auf. Aber den Anschnitt kann ich auch auskommentieren und das Problem bleibt.

Den Umgang mit den internen Makros verstehe ich gerade noch nicht, aber das wird noch kommen. Nur nicht heute.

Auf jeden Fall muss man es also anders herum machen, als ich dachte (1. Bsp.). Das wäre somit gelöst. Danke. Wichtig war auch noch, dass ich im Text {} nicht vergessen darf.

Damit wäre diese Frage hier gelöst für mich erst einmal. Danke für die Hilfe.

Grüße

Bebbi
Zuletzt geändert von Bebbi am Mo 30. Jul 2018, 19:54, insgesamt 2-mal geändert.

Gast

Beitrag von Gast »

Bebbi hat geschrieben:
\subtitle{Mein prägender Untertitel}
\newcommand{\mysubtitle}{\subtitel}
Wie schon der \mysubtitle sagt, …}
Du musst Dir einfach einmal klar machen, was dabei passiert. \subtitle ist bei der verwendeten KOMA-Script-Klasse scrbook eine Anweisung mit Argument. Du definiert \mysubtitle als neue Anweisung, die diese Anweisung \subtitle aufruft¹. Wird dann im Satz \mysubtitle verwendet, wird also letztlich an dieser Stelle \subtilte aufgerufen, das dann ein Argument erwartet.

Damit sollte klar werden, warum der Ratschlag oben auch lautete:
Außerdem kann man einmal definierte Befehle natürlich auch im Argument von anderen Befehlen verwenden.
was auf das inzwischen ebenfalls gezeigt:
\newcommand{\mysubtitle}{Mein prägender Untertitel}
\subtitle{\mysubtitle}
\maketitle
Wie schon der \mysubtitle{} sagt, …
hinaus läuft. Hier wird zunächst einmal der Befehl \mysubtitle mit dem gewünschten Text »Mein prägender Untertitel« definiert. Dieser wird dann mit \subtitle als Untertitel für \maketitle gesetzt und später auch direkt per \mysubtitle im Text ausgegeben.

Übrigens würde bei den KOMA-Script-Klassen² auch:
\documentclass{scrbook}

\makeatletter
\newcommand*{\mytitle}{\@title}% Hack: Verwendung einer internen Anweisung!
\newcommand*{\mysubtitle}{\@subtitle}% Hack: Verwendung einer internen Anweisung!
\makeatother

\begin{document}
\title{Mein toller Buchtitel}
\subtitle{Mein prägender Untertitel}
\author{Ich}
\maketitle

Wie schon der \mysubtitle{} sagt, …
\end{document}
funktionieren. Allerdings werden dabei zwei interne Anweisungen verwendet, was man besser vermeiden sollte. Das \makeatletter wird hier übrigens benötigt, weil das at-Zeichen »@« außerhalb von Klassen und Paketen nicht in Befehlsnamen verwendet werden darf. Erst \makeatletter, das aus dem »@« für TeX einen Buchstaben macht, macht dies möglich. Mit \makeatother wird aus dem »@« dann wieder ein sonstiges Zeichen, die Wirkung von \makeatletter also wieder aufgehoben.Wie schon der \mysubtitle{} sagt, …



Fußnoten:

1 Tatsächlich spricht man bei (La)TeX nicht von aufrufen, sondern davon, dass eine Anweisung (= Makro) zu etwas expandiert. Das liegt daran, dass TeX eine Makrosprache ist. Dabei wird ein Makro immer durch seine zum Zeitpunkt der Expansion gültigen Definition ersetzt = expandiert. Expandiert wird dabei zu unterschiedlichen Zeiten der Code-Verarbeitung, teilweise sehr früh (beispielsweise bei `\edef`), teilweise auch erst sehr spät (beispielsweise beim Schreiben in Hilfsdateien, wie der `aux`-Datei).

2 Bei den Standardklassen würde diese Methode mit dem Hack nicht funktionieren, weil bei den Standardklassen, \@title nach \maketitle als \@empty definiert ist. Damit würde auch \mytitle im Dokument letztlich zu etwas leerem expandieren. Und natürlich gibt es \subtitle bei den Standardklassen gar nicht und würde deshalb zu einem Fehler führen.

Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 65
Registriert: Do 4. Jan 2018, 02:32

Beitrag von Bebbi »

Interessant.

Bei
\makeatletter 
\newcommand*{\mytitle}{\@title}% Hack: Verwendung einer internen Anweisung! 
\makeatother 
gucke ich immer noch ratlos. \title ist ein internes Makro, also für den Endanwender quasi ein Befehl. Der Makroname darf nur Buchstaben enthalten, also Zeichen der Kategorie 11=Buchstaben. Der Makroname ist für mich "title". Ob das sinnvoll ist oder nicht kann ich nicht beurteilen. Aber es klingt irgendwie sinnvoll.

Eine Ausnahme gibt es für das erste Zeichen. Wenn das eine andere Kategorie hat, verdrängt dass den Makronamen, hier ist der Makroname als @, da @ zur Kategorie der sonstigen Zeichen gehört.

Nur stellt sich mir die Frage, wofür den Aufwand hier? "title" besteht doch nur aus Buchstaben.

Damit "@title" der Makroname bleibt, kommt das in eine besondere "Box" \makeatletter … \makeatother, die @ zu einem Buchstaben macht.

Dadurch habe ich für das Makro "\title" den neuen/zusätzlichen Namen "\@title" festgelegt. Auch da bleibt unklar, warum ich das mache.

Vermuten würde ich, dass der Befehl "\title" das interne Makro "\@title" aufruft und @ immer interne Makros kennzeichnet, die hinter den jeweiligen Befehlen stehen.

Grüße

Bebbi

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

@ heißt bei LaTeX intern. Willst du auf den inneren Bereich zugreifen, ihn ändern, musst du mit makeatletter in den Expertenmodus wechseln.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 65
Registriert: Do 4. Jan 2018, 02:32

Beitrag von Bebbi »

Johannes_B hat geschrieben:@ heißt bei LaTeX intern. Willst du auf den inneren Bereich zugreifen, ihn ändern, musst du mit makeatletter in den Expertenmodus wechseln.
Ok, ich glaub, so langsam wird mir klar, was da passiert. Ein Befehl kann nicht einfach so einem internen Makro gleichgesetzt werden. Daher öffne ich dafür den Expertenmodus durch \makeatletter … \makeatother und in dem setze ich meinen neuen Befehl gleich mit dem internen Makro.

Eine ganz eigene Welt, in die ich mich hier eindenke. :-)

Danke.

Grüße

Bebbi

Antworten