PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kerning bei selbstgebauten Ligaturen



Fritz
27-12-2006, 18:01
Hallo,
ich benötige einige mittelalterliche Ligaturen (z.B. e über o, e über u usw). Auf die Schnelle habe ich das einfach mal so gemacht:

\newcommand{\ooe}{o~{\hspace{-1.65ex}\raisebox{1.10ex}{\tiny e}}\kern0.2ex}

Das funktioniert im Grunde auch ganz gut, allerdings verwendet LaTeX jetzt die Kerninginformation für das e und nicht für das o, um den Abastand zum nachfolgenden Buchstaben zu berechnen, was teilweise recht unschön aussieht.

Hat da jemand eine Idee wie man das hibekommen kann, oder auch ganz anders machen kann?

Danke.

rais
27-12-2006, 21:33
\newcommand{\ooe}{o~{\hspace{-1.65ex}\raisebox{1.10ex}{\tiny e}}\kern0.2ex}

und ich dachte immer, ex sei für vorwiegend vertikale Längen...?
Und wenn Du es z.B. so versuchst:


\newcommand{\ooe}{\makebox[0pt][l]{\raisebox{1.10ex}{\kern0.1em{\tiny e}}}o}

MfG,

Fritz
28-12-2006, 11:26
\newcommand{\ooe}{\makebox[0pt][l]{\raisebox{1.10ex}{\kern0.1em{\tiny e}}}o}


Das funktioniert besser, Danke. Kann man irgendwie die Höhe von einem Objekt erfahren, denn bisher hab ich für jeden Buchstaben die Höhe für die \raisebox und die Verschiebung von Hand raussuchen müssen.

Fritz

sofa-surfer
28-12-2006, 13:57
Kann man irgendwie die Höhe von einem Objekt erfahren, denn bisher hab ich für jeden Buchstaben die Höhe für die \raisebox und die Verschiebung von Hand raussuchen müssen.

Fritz

Vielleicht mit dem calc-Paket:


\documentclass{article}

\usepackage{calc}



\begin{document}

e \rule{\widthof{e}}{\heightof{e}}

f \rule{\widthof{f}}{\heightof{f}}

\end{document}

Matthias

rais
29-12-2006, 22:40
Moin moin,
gibt es nicht auch \settoheight{Länge}{Text}, der die angegebene Länge an die Höhe des angegebenen Textes anpaßt... so ganz ohne calc?
MfG,

Fritz
01-01-2007, 22:22
Moin moin,
gibt es nicht auch \settoheight{Länge}{Text}, der die angegebene Länge an die Höhe des angegebenen Textes anpaßt... so ganz ohne calc?
MfG,

Sorry, ich war 'ne Weile offline. Danke für die Hinweise! Hmm, ganz naiv könnte man sich daraus sowas basteln:



\newcommand{\overLigature}[2]{%
\newlength{\overLigatureHeight}%
\newlength{\overLigatureWidth}%
\settowidth{\overLigatureWidth}{#1}%
\settoheight{\overLigatureHeight}{#1}%
\makebox[0pt][l]{\raisebox{1.05\overLigatureHeight}%
{\kern0.5\overLigatureWidth{\tiny #2}}}#1%
}%

das klappt dann natürlich nur einmal, da die ganzen Längen bei einem weiteren aufruf schon definiert sind, ist ja auch nur ein Macro, keine Funktion mit lokalen Variablen. Aber ich weiß leider nicht wie man das richtig machen könnte.
Jemand eine Idee?

Fritz
01-01-2007, 23:43
[...]
das klappt dann natürlich nur einmal, da die ganzen Längen bei einem weiteren aufruf schon definiert sind, ist ja auch nur ein Macro, keine Funktion mit lokalen Variablen. Aber ich weiß leider nicht wie man das richtig machen könnte.
Jemand eine Idee?

Ähem, hust, hust. Die Längen innerhalb des Macros zu definieren ist natürlich Mumpitz. Aber dass die Werte von Registern bei TeX offenbar immer lokal ausgewertet werden, und sowas wie explizit lokale Variablen daher garnicht notwendig sind, muss man auch erstmal wissen ...

Damit ist das geklärt, Danke nochmal für die Hilfe!