PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \sectionname



ctansearch
14-04-2012, 22:39
Hallo,
weiß jemand, wie man den Namen der Section abgreifen kann, in der man sich gerade befindet?

Es sollte etwa so funktionieren:



\section{Beispiel}
\subsection{Unterbeispiel}

\sectionname
\subsectionname


Ergebnis:

1. Beispiel
1.1 Unterbeispiel

1. Beispiel
1.1 Unterbeispiel

Stefan_K
14-04-2012, 23:37
Das geht z.B. mit titleref und nameref.

Stefan

ctansearch
15-04-2012, 00:04
@stefan

Das ist nicht ganz das,was ich suche.
Für \nameref und \titleref muß ich die Pakete einbinden und \label setzen.

Ich möchte ohne zusätzliche Pakete die Namen der Gliederungen etc erhalten und diese weiterverwenden.
Irgendwo muß ja

\def\section#1{#1}
definiert sein. Leider finde ich nicht heraus,wo.
Was ich gerne hätte wäre

\def\section#1{\def\sectionname{#1} #1}
so, daß ich im Dokument oder der .sty-Datei

\sectionname abrufen kann und z.B. mit

\large{\sectionname}
formatieren kann.

Analog dazu bei allen anderen Gliederungen.

Stefan_K
15-04-2012, 00:34
Für \nameref und \titleref muß ich die Pakete einbinden und \label setzen.

Was ist daran schlimm? LaTeX liefert die highlevel Makrosprache, Klassen die Grundfunktionalität, Pakete Zusatzfunktionen, die sich spezifisch hinzuladen lassen.



Ich möchte ohne zusätzliche Pakete die Namen der Gliederungen etc erhalten und diese weiterverwenden.
Dann ist der Quellcode der o.g. Pakete sicher hilfreich, wenn man den entnehmen möchte.


Irgendwo muß ja

\def\section#1{#1}
definiert sein. Leider finde ich nicht heraus,wo.

Das wird in den Klassen definiert. Z.B. so in article.cls:


\newcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}

Da kann man redefinieren und sich einklinken und \sectionname definieren. Wobei man das auch bei \sectionmark tun kann.

Stefan

ctansearch
15-04-2012, 23:22
@stefan
Dieser Quelltext war mir bekannt und ich habe viel damit herumprobiert.
Scheint nicht zu gehen.

Egal welche Kombination ich verwende, es scheint nicht möglich zu sein, diesen Befehlen Parameter mitzugeben, die ich dann als \sectionname weiterverwenden kann.

Ich habe den Eindruck, daß diese Definition fehlerhaft formuliert ist und nur zufällig oder aufgrund anderer Definitionen funktioniert.


\newcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{ \normalfont\Large\bfseries}}

sommerfee
16-04-2012, 05:20
Dieser Quelltext war mir bekannt und ich habe viel damit herumprobiert.

Was genau hast du denn ausprobiert?


Scheint nicht zu gehen.

"Scheint nicht zu gehen" ist keine hilfreiche Problembeschreibung, auf dessen Basis man weiterhelfen könnte.


Ich habe den Eindruck, daß diese Definition fehlerhaft formuliert ist und nur zufällig oder aufgrund anderer Definitionen funktioniert.

Worauf basiert dieser Eindruck? (BTW: \@startsection, \@sect etc. sind in source2e ausführlich dokumentiert. Und das viele Definitionen nur aufgrund anderer Definitionen funktionieren, ist völlig normal.)

u_fischer
16-04-2012, 08:43
Stefan hat dir doch schon den richtigen Tipp mit \sectionmark gegeben. Das ist der Befehl innerhalb \section, den man dazu nutzen kann, den Titel irgendwo hin zu schieben, z.B. in die Kopfzeile oder halt in einen Befehl:


\documentclass{article}
\renewcommand\sectionmark[1]{%
\def\sectionname{#1}%
\markright{\thesection #1}%oder was aus immer
}

\begin{document}
\section{blub}

\sectionname

\section[kurz]{blabbla}

\sectionname
\end{document}

ctansearch
16-04-2012, 23:51
@all
Ok, danke soweit.
Funktioniert zwar, ist aber programmtechnisch doch ein ziemliches Durcheinander.
Bleibt ja nicht aus bei einer Makrosprache, aber trotzdem der Hinweis:

Wo ist denn \sectionmark "innerhalb" von \section definiert? (Ulrike)
Es gibt in article.cls nur eine Stelle, nämlich in "\def\ps@headings{" wo \sectionmark definiert ist. Diese Definition liegt ausserhalb von "\newcommand\section{...}". Wie und warum wird diese in \section wirksam?

Latex lebt mittlerweile von einer Menge an Bezügen, die kaum noch nachvollziehbar sind,. Natürlich ist es normal in einem Programm, daß Bezüge genutzt werden (sommerfee).
Wenn diese Bezüge aber nicht mehr aus dem Programm selbst heraus auffindbar sind, entsteht ein Problem. Es fehlt in Latex sehr an Verweisen auf Quellen, die notwendig wären, wenn man Redundanz vermeiden will.

Gibt es eine Funktion, die für jeden Befehl angibt, aus welcher Datei er stammt, abgesehen von den Fehlermeldungen, sowas wie den Parameter %0 aus den alten DOS-Batches? Wäre hilfreich.

u_fischer
17-04-2012, 07:54
Wo ist denn \sectionmark "innerhalb" von \section definiert? (Ulrike)

Innerhalb von \section wird es gar nicht definiert, dort wird es benutzt, und zwar in \@sect durch \csname #1mark\endcsname{#7}. Dies ruft \sectionmark, \subsectionmark usw je nach Überschrift #1 auf.

rais
17-04-2012, 19:24
Moin moin,


Funktioniert zwar, ist aber programmtechnisch doch ein ziemliches Durcheinander.

Was genau ist hier ein `Durcheinander'?

Ich *vermute*, daß Dein Eindruck damit zusammenhängt, daß \section hier als parameterloser Befehl definiert ist (die Parameter []{} zu \section werden erst beim \@sect-Aufruf aufgegriffen). Vllt hilft Dir ja


\tracingmacros=1
\documentclass{article}
\newcommand*\testiii[3]{%
(iii) 1:#1, 2:#2, 3:#3\par
}
\newcommand*\testii[2]{%
(ii) 1:#1, 2:#2\par% Testausgabe
\testiii{#1}{#2}%
}
\newcommand*\test{%
\testii{A}{B}%
}
\begin{document}
a\test{b}c
\end{document}

nach Inspektion der entstandenen .log-Datei...


Es gibt in article.cls nur eine Stelle, nämlich in "\def\ps@headings{" wo \sectionmark definiert ist. Diese Definition liegt ausserhalb von "\newcommand\section{...}". Wie und warum wird diese in \section wirksam?

Das wird sie gar nicht, es sei denn, Du rufst z. B. \pagestyle{headings} auf, siehe dazu in `texdoc source2e' die Beschreibung zu eben \pagestyle.
Hier dürfte noch die Definition von \sectionmark aus dem LaTeX-Kern greifen, siehe dazu in `texdoc source2e' nach `Initializations' oder eben nach `\sectionmark'.


Gibt es eine Funktion, die für jeden Befehl angibt, aus welcher Datei er stammt, abgesehen von den Fehlermeldungen, sowas wie den Parameter %0 aus den alten DOS-Batches? Wäre hilfreich.
Eine solche Funktion ist mir nicht bekannt, evtl tut es einer der \tracing*-Befehle (siehe TeXbook) im Zusammenhang mit Auswerten der .log -- die derzeit offene Datei wird dort ja innerhalb eines Klammerpaares dargestellt.
Imho bietet Dir TeX etwas Besseres: nicht wo etwas definiert ist (das kann erstmal überall sein, auch in Deiner eigenen Präambel), sondern wie etwas (derzeit) definiert ist: \show\Befehlsname.
So liefert z. B.


\show\sectionmark
\documentclass{article}
\show\sectionmark
\pagestyle{headings}
\show\sectionmark
\begin{document}
a
\end{document}

bereits beim ersten \show-Aufruf eine gültige Definition (sonst stünde da etwas von `undefined';-), wobei sich die Definition von \sectionmark allein durch Laden der article-Klasse nicht ändert; erst nach \pagestyle{headings} sieht die Definition von \sectionmark anders aus.

MfG

Klaus-Anton
29-04-2012, 20:03
Ich habe mir ein kleines Makro gemacht, um auf das Argument von \chaper zugreifen zu können (siehe meinen Beitrag vom 21.04.2012 hier http://www.golatex.de/uebersetzungsprobleme-t8627.html):
\def\titlechapter#1%
{% begin of \def\titlechapter#1%
\def\currentchaptertitle{#1}%
\chapter{#1}%
}% end of \def\titlechapter#1%

Aber im Grunde genommen würde ich denken, dass LaTeX einem auch mit \@firstofone das Argument einer Definition liefern dürfte, ich weiß aber nicht wie. Wenn das so möglich ist, kann mir das dann jemand hier anhand von \section oder \chapter erklären?

Wie das Beispiel mit \chapter zeigt, kann man nicht durchgängig alle Argumente der Gliederungspunkte mit \Gliederungspunktname benennen, weil \chaptername schon im babel-Paket definiert ist.

rais
01-05-2012, 18:40
Moin moin,

Ich habe mir ein kleines Makro gemacht, um auf das Argument von \chaper zugreifen zu können (siehe meinen Beitrag vom 21.04.2012 hier http://www.golatex.de/uebersetzungsprobleme-t8627.html):
\def\titlechapter#1%
{% begin of \def\titlechapter#1%
\def\currentchaptertitle{#1}%
\chapter{#1}%
}% end of \def\titlechapter#1%

ich verstehe nicht, was genau Du (bzw. wozu Du das) eigentlich willst.
Sofern es (wie im von Dir verlinkten Thread) nur mit den Kopfzeilen zu tun hat, kannst Du per \lhead/\rhead (fancyhdr) bzw. \ihead/\ohead (scrpage2) auf \leftmark/\rightmark zugreifen, so die verwendete Klasse lebende Kolumnentitel unterstützt (bei Verwendung von scrpage2 hilft andernfalls evtl die Verwendung von \automark, siehe scrguide).
Mit anderen Worten: hat Dir Elke dort bzw. Ulrike hier nicht bereits Deine Frage beantwortet ... ?

MfG

Klaus-Anton
02-05-2012, 17:46
Moin moin,

ich verstehe nicht, was genau Du (bzw. wozu Du das) eigentlich willst. [...] Mit anderen Worten: hat Dir Elke dort bzw. Ulrike hier nicht bereits Deine Frage beantwortet ... ?

Danke der Nachfrage, rais.

Was Elke da und Ulrike hier geschrieben haben, das hat mir meine Frage noch nicht beantwortet. Weswegen ich auf das Argument von \chapter separat zugtreifen möchte, das ist wegen der unterschiedlichen Art der Formatierung als \textrm{\chaptername~\thechapter}.~\emph{Laufende Kapitelüberschrift}. Ich halte es für sinnvoll, in der Kopfzeile \textrm{\chaptername~\thechapter} typographisch von der eigentlichen Überschrift abzusetzten, das scheint ja auch schon der Autor der Thesis.cls so erkannt zu haben, bei Elkes Lösungsweg fällt das aber wieder unter den Tisch.

Mit dem Minimimalbeispiel im oben zitierten Thread des golatex-Forums, welches mit fancyhdr arbeitet, ist es mir noch nicht richtig gelungen. mein Anliegen umzusetzen, es sei denn, dass ich das für jedes Kapitel einzeln manuell eintrage, was aber nicht gerade sehr intelligenter LaTeX-Code ist. Das ist also der Grund, warum ich mir das von dir zitierte Markro ausgedacht habe. Dieses funktioniert zwar schon so, wie ich das haben möchte, aber es ist nomenklatorisch verwirrend und deswegen anderen irgendwie vielleicht nicht richtig zumutbar, wenn der \chapter-Aufruf indirekt erfolgt. Deswegen interessiert mich hier im konkreten Fall noch immer das Grabben des Argumentes von \chapter (bzw. anderen Gliederungsaufrufen).

Das was Ulrike hier geschrieben hatte, das dachte ich auch, das würdre es nun sein und darüber habe ich mich auch sehr gefreut (vielen Dank, Ulrike), aber in das zitierte Minimalbeispiel des golatex-threads konnte ich das dann doch nicht so umsetzen, wie ich es haben wollte, trotz intensiven Probierens. Vielleicht liegt es ja an der Thesis.cls (mit der ich selbst ja sowieso eigentlich gar nicht arbeite, sondern nur Mirame und die oder den scheint das vielleicht darin ohnehin nicht sonderlich zu stören, und von der Thesis.cls wurde wohlweislich ja abgeraten). Kurzum, das heißt: Wenn ich also mit eigenem Minimalbeispiel hier noch immer das Problem als gegeben ansehen werde, dann werde ich dieses dann hierherposten.

scrpage2 habe ich noch nicht näher angesehen. Das habe ich noch auszutesten. Das interessiert mich sowieso, das einmal kennenzulernen.

LG
Klaus

esdd
02-05-2012, 19:48
Hallo,

also von dieser Thesis.cls und den zugehörigen Dateien würde ich auch dringend abraten. Unter anderem ist der Umgang mit den Kopfzeilen mehr als seltsam.

Die Kopfzeilen lassen sich natürlich auch automatisch wie gewünscht formatieren, wobei das bei Ulrike schon so ähnlich stand:



\documentclass[oneside]{book}

\usepackage[ngerman]{babel}
\usepackage{blindtext}

\usepackage{fancyhdr}
\pagestyle{fancy}
\makeatletter
\renewcommand{\chaptermark}[1]{\markright{\@chapapp~\thechapter.~\emph{#1}}}
\makeatother
\renewcommand{\sectionmark}[1]{}
\renewcommand{\subsectionmark}[1]{}
\fancyhf{}
\rhead{\thepage}
\lhead{\rightmark}

\begin{document}
\blinddocument
\end{document}

Gruß
Elke