Fehler bei verlinkungen

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


Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Fehler bei verlinkungen

Beitrag von Laures »

Hi, ich bins mal (oder besser schon?) wieder.

Laut Dokumentation kann man im style-Argument von \@startsection als letztes Makro eines wählen das den Titel der Gliederungsebene als Parameter erwartet.

Wenn ich das aber wirklich mache (z.B. mit \MakeUppercase) bricht beim compilieren alles auseinander. Nur wenn ich die Nummerierung mit \setcounter{secnumdepth}{0} runterschraube geht es. Und selbst dann bekomme ich von pdftex warnungen ala: name(section*.1) has been referenced but does not exist. replaced with a fixed one

Danach funktionieren im PDF die Sections im inhaltsverzeichnis nciht mehr. Die führen dann alle zur ersten seite.

Hier eine kleine Sandbox zum Testen:
\documentclass[twoside,twocolumn,10pt,pdftex]{scrbook}
\usepackage{Sandbox}
\usepackage{hyperref}

\begin{document}

\chapter{chapter}

text

\clearpage

\section{section}

text

\end{document}
die Sandbox.sty enthällt:
\setcounter{secnumdepth}{0}
\renewcommand\section{\@startsection{section}{1}{\z@}%
	{-3.5ex \@plus -1ex \@minus -.2ex}%
	{2.3ex \@plus.2ex}%
	{%
		\ifnum \scr@compatibility>\@nameuse{scr@v@2.96}\relax%
		\setlength{\parfillskip}{\z@ plus 1fil}\fi%
		\normalfont\MakeUppercase
	}%
}%
Wenn der \setcounter auskommentiert wird, explodiert alles. wird \MakeUppercase entfernt ist alles wieder in ordnung.

Ist das Problem bekannt und gibt es eine Lösung dafür?
programming is like sex, one mistake and you have to support it for the rest of your life

skater
Forum-Guru
Forum-Guru
Beiträge: 356
Registriert: Do 12. Mär 2009, 14:34
Wohnort: Berlin

Beitrag von skater »

Die ERSTE Lösung wäre, einfach auf GROßBUCHSTABEN zu verzichten.

Die erste Frage wäre, was genau du da eigentlich erreichen möchtest.

Um \MakeUppercase würde ich – auch aus anderen Gründen – einen großen Bogen machen.

Ansonsten:
\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{kpfonts}

\addtokomafont{section}{\scshape}

\begin{document}
\chapter{chapter}
text
\section{section}
text
\end{document}

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Schon \uppercase und \lowercase sind keine normalen Primitiven. Für die Makros \MakeUppercase und \MakeLowercase gilt dies (sinngemäß) noch viel mehr. U. a. wird das Argument dieser Makros mit \protected@edef verarbeitet. Bereits das funktioniert nur, wenn das Argument voll expandierbar bzw. problematische Teile darin mit \protect geschützt sind. Das ist allerdings dann nicht mehr möglich, wenn man \MakeUppercase an Stellen einschleußt, an denen man das Argument gar nicht genau kennt, bzw. keinen absoluten Einfluss darauf hat. Im konkreten Fall wird (bei der LaTeX2e-Kernel-Version von \@startsection) das 6. Argument von \@startsection später u. a. so verwende:
      #6{%
        \@hangfrom{\hskip #3\relax\@svsec}%
          \interlinepenalty \@M #8\@@par}%
Schon das \@hangfrom dürfte im Argument von \MakeUppercase schief gehen.

Fazit: \MakeUppercase und \MakeLowercase sollte man nie als Maßstab für irgendwelche Aussagen bezüglich Makros mit Argumenten nehmen.

Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Beitrag von Laures »

gut das zu wissen.
blöd ist es trotzdem, den Kapitälchen sind halt was anderes als Großbuchstaben.
programming is like sex, one mistake and you have to support it for the rest of your life

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Nicht gesperrter Versalsatz ist hässlich und typografisch betrachtet in mehrfacher Hinsicht ungünstig. Deshalb sollte man von \MakeUppercase für mehr als einen Buchstaben die Finger lassen. Gut gesperrter Versalsatz erfordert in der Regel Handarbeit, ein gute Auge und etwas Erfahrung - und Zeit. Und weil die meisten Anwender, das alles nicht wissen, gibt es viele hässliche Dokumente und leider auch Bücher.

BTW: Kapitälchen sollte man i. d. R. eigentlich auch leicht sperren. Dort ist es aber nicht ganz so schlimm, darauf zu verzichten. Außerdem kann man dort besser automatisch sperren (das microtype-Paket bietet dafür Befehle), weil es besser ausgebaute Kerning-Tabellen gibt.

Achso: Du kannst Dir natürlich einen (virtuellen) Font basteln, bei dem alle Kleinbuchstaben durch die entsprechenden Großbuchstaben ersetzt sind und gleichzeitig bereits passende Metriken und Kerning-Paare definiert sind, so dass das Sperren entfällt. Ja, das macht ebenfalls viel Arbeit. Vor allem, muss man sich erst einmal durch Anleitungen wie den fontinstallationguide lesen. Wenn man das dann aber irgendwann geschafft hat und das gewonnene Wissen auch immer frisch hält, wird man gleich mal eben zum geschätzten Experten. :twisted:

Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Beitrag von Laures »

wenn du mit font installation meist truetype/opentype schriften nach latex zu kriegen... damit befasse ich mich grad.

Ich muss mir noch ravenna und mentor zurechtbasteln.
programming is like sex, one mistake and you have to support it for the rest of your life

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Mit fontinstallationguide meine ich den fontinstallationguide. AFAIK steht da auch etwas darüber, wie man in einem virtuellen Font Zeichen ersetzen und Kerningtabellen ändern/aufbauen kann. Wenn es da nicht drin steht, dann steht es in der Anleitung zu fontinst.

Antworten