Ich würde gerne Indexe (Manicule) automatisch erstellen.
Die Schwierigkeit ist dabei, dass das Index-Zeichen (☜ / ☞, ☚ / ☛) immer zum Text weisen muss, d.h. Koma-Script muss erkennen, ob die Seite gerade oder ungerade ist.
[Eventuell muss man vor/hinter die umgedrehte Form LTR/LTR setzen oder die Umgebung rechtsläufig machen.]
Wahl des Index-Zeichen-Stils (weiß/schwarz/hoch-runter/emoji) wäre nett.
Optional: Wahl der der Schriftart mit fontspec, regelbare Größe des Index-Zeichens.
Siehe auch:
https://en.wikipedia.org/wiki/Index_(typography)
[Admin-Edit:]
RTFM
Für Randmarkierungen jeglicher Art gibt es bereits die LaTeX-Standardanweisung
\marginpar
. Diese besitzt auch zwei unterschiedliche Argumente, um zwischen Ausgaben für linke und Ausgaben für rechte Seiten unterscheiden zu können. Diese ist auch in der Anleitung und im Buch dokumentiert. Es ist ein leichtes, sich daraus eine eigene Anweisung zu bauen, die einen Text zusammen mit dem jeweiligen Zeichen in der gewünschten Schrift ausgibt. Im einfachsten Fall, beispielsweise etwas wie (mangels vollständigem Minimalbeispiel ungetestet):Das setzt natürlich einen Font voraus, der diese Zeichen auch enthält. Alternativ kann man entsprechende Symbol-Fonts und deren Befehle für die Zeichen selbst verwenden.
Genau genommen wird hier lediglich Basisfunktionalität von LaTeX verwendet. So dass das bis hier gar keine KOMA-Script-Frage ist.
Bezüglich Befehle für eine Ausrichtung des Textes, Farbe, Schriftart etc. sei auf die einschlägige Literatur zu LaTeX und ebenfalls auf die KOMA-Script-Anleitung und das KOMA-Script-Buch hingewiesen. So böte es sich beispielsweise an für Schrifteinstellungen ein neues Element mit
\newkomafont
zu definieren und dieses dann mit\usekomafont
in obiger Definition zu verwenden. Dadurch wäre dann auch ein gewisser Bezug zu KOMA-Script gegeben. Bezüglich möglicher Probleme bei der Verwendung von\marginpar
sei ebenfalls auf die KOMA-Script-Anleitung oder das KOMA-Script-Buch verwiesen.Übrigens kennt KOMA-Script auch Befehle, um rechte und linke Seiten zu erkennen. Auch diese sind in der Anleitung und im Buch dokumentiert. Hier wird ein solcher IMHO aber nicht zusätzlich benötigt.
Uups...
Sorry, ich hätte nicht gedacht, dass es prinzipiell so einfach ist.
\DeclareRobustCommand{\manicule}[1]{\marginpar[{#1 ☛}]{☚ #1}}
funktioniert schon mal.
Allerdings nimmt
\manicule
im fertigen Text den ersten Buchstaben des nächsten Wortes mit, also\manicule Eastern
wird zu Randnote ☚E und im Text steht astern. Morgen bereite ich ein Minimalbeispiel vor.Argument!
Nun, da nicht genau spezifiziert war, was du haben willst, habe ich einen Befehl mit Argument definiert. Wenn du keinen Befehl mit Argument haben willst, lass das Argument in der Deklaration weg. Wenn du nur manchmal eines haben willst, dann mach ein optionales daraus.
Wie das geht? Lies bitte eine ausführliche LaTeX-Einführung, in der (neben
\marginpar
) auch Befehle wie\newcommand
,\renewcommand
und\DeclareRobustCommand
erklärt werden. Ich kann hier nicht jedem LaTeX-Anfänger eine individuelle LaTeX-Einführung geben. Das ist auch nicht Thema der Seiten hier.newkomafont?
Nein, ein optionales Argument brauche ich gar nicht.
Also
\DeclareRobustCommand{\manicule}{\marginpar[{☛}]{☚}}
läuft, aber dann kriege ich Probleme:wirkt bei mir nicht, die Zeichen werden weiterhin im Standardzeichensatz angezeigt.
Ich habe stundenlang das KOMA-Script-Manual durchgeblättert und Alternativen ausprobiert... was mache ich falsch?
\usekomafont wirkt dort, wo es steht
Wie der Anleitung durchaus zu entnehmen ist, wirkt
\usekomafont
auf die aktuelle Schrift. Es gibt auch massenhaft Beispiele für die Verwendung von\usekomafont
hier auf komascript.de. Du willst, dass es auf die Schrift in den beiden Argumenten von\marginpar
wirkt, also muss es natürlich auch dort hin (in Ermangelung eines vollständigen Minimalbeispiels ungetestet)::Wobei die Verwendung von
\fontspec
in der von dir gezeigten Form in der fontspec-Anleitung explizit nicht empfohlen wird. Dort wird stattdessen empfohlen, eine neue Familie zu definieren und diese dann zu verwenden.Fast geschafft
Neue Familie definiert... und es klappt! Danke :)
Allerdings ist das Index-Zeichen in dieser Schriftart sehr klein...
Schon besser.
Aber das Index-Zeichen auf linken Seiten sollte rechtsbündig sein. So lange, wie ich nach der Lösung suche, behelfe ich mir mit
Dann ist da noch der Umstand, das durch die Vergrößerung des Index-Zeichen der Finger fast in den Zeilenzwischenraum des Haupttextes weist. Ich muss also das Zeichen irgendwie leicht absenken...
RTFM
\raggedright
,\raggedleft
,\hfill
und\hspace*{\fill}
dürften in jeder halbwegs vollständigen LaTeX-Einführung zu finden sein.Mehr werde ich zu dem ganzen nur noch schreiben, wenn es endlich das mehrfach angemahnte vollständige Minimalbeispiel gibt, mit dem ich dann ggf. auch testen kann.
Rechtsbündig!
So, das Index-Zeichen auf linken Seiten ist jetzt rechtsbündig:
Aber dafür macht das Absenken Schwierigkeiten. Ich hatte gedacht, dass das vielleicht über
\raisebox{-3pt}{\manicule}
(mit graphicx) zu lösen wäre, aber \marginpar lässt das nicht zu.
Liest Du eigentlich, was ich schreibe?
flushright
ist wiecenter
eine (trivlist
-)Umgebung. Deshalb hatte ich auch nicht das, sondern\raggedleft
genannt.Und natürlich kann es nicht funktionieren, wenn die
\marginpar
-Anweisung selbst vertikal verschoben wird (ganz davon abgesehen, dass das erhebliche Auswirkungen auf den Zeilenabstand haben könnte). Stattdessen muss die Ausgabe der Anweisung, also ihre Argumente, vertikal verschoben werden. Das wird aber auch nicht immer das bewirken, was man sich so vorstellt, weil\maginpar
auch eine Kollisionserkennung beinhaltet. Die Argumente davon erzeugen eine Art Gleitobjekt für den Rand (weshalb es auch nicht in einer Gleitumgebung verwendet werden kann, aber das ist ein anderes Thema). Wenn also die Ausgabe des Argument von\marginpar
vertikal verschoben werden soll, muss man folgerichtig\marginpar{\raisebox{-3pt}{foo}}
statt\raisebox{-3pt}{\marginpar{foo}}
verwenden.Bitte lies eine ausführliche LaTeX-Einführung oder frag dergleichen in einem allgemeinen LaTeX-Forum. Ich kann hier wirklich nicht jedem einzelnen eine private LaTeX-Einführung geben.
Minimalbeispiel
Kein vollständiges Minimalbeispiel
Da das Beispiel zwingend auf einen bestimmten Font angewiesen ist, der nicht Bestandteil von TeX Live ist, ist das Beispiel bei mir so nicht lauffähig. Ich bräuchte also min. eine legale kostenlose Quelle für den Font. Besser ist, wenn man solche Abhängigkeiten vermeidet.
Wirrwarr
Entschuldigung, ich hatte die Seite nicht neu geladen. Daher habe ich Deine Kommentare erst im Nachhinein gelesen. Das mit
\marginpar{\raisebox{-3pt}{foo}}
habe ich schon selbst gemerkt.Ich weiß nicht, welche Fonts in TeX Live sind, die das Index-Zeichen enthalten. Versuch mal Code2000...
PS: Also \raggedleft funktioniert schon mal, danke!
PPS: Aber
\newcommand\manicule{\marginpar{\raisebox{-4pt}{[{\raggedleft{\maniculefont{☛}}}]{\maniculefont{☚}}}}}
gibt [☛]☚ statt ☚ aus.Du brauchst mir nicht zu helfen, das ist nur Dokumentation; hoffentlich finde ich selbst die Lösung.
Wem "gehören" die eckigen Klammern?
Falsche Klammerung. Überlege, welches die Klammern von welchem Befehl sind, dann kommst Du sicher selbst darauf.
Welche Fontpakete in gängigen TeX-Distributionen enthalten sind, kann man im CTAN-Katalog sehen. Irgendwelche Systemfonts von Windows oder MacOS gehören eher nicht dazu. Und unfreie Fonts gehören erst recht nicht dazu. Wenn der Font also bei Dir nicht im TEXMF-Baum der TeX-Distribution liegt, dann ist das schon ein sehr deutlicher Hinweis, dass min. eine legal kostenlose Quelle für den Font anzugeben wäre. Oder man verwendet eben einen freien Font, wie sie auch in »The Comprehensive LaTeX Symbol List« zu finden sind.
Der Übersicht wäre es übrigens förderlich, wenn Du nicht immer nur die Frage kommentieren würdest, sondern Antworten zu den Kommentaren, die Du tatsächlich kommentieren willst, verfassen würdest. Je nach Sortierung, die man in den persönlichen Einstellungen gewählt hat, wird es sonst recht verwirrend.
Warm... heiß...
Ah, wenn ich
\raisebox
aufspalte geht es:\newcommand\manicule{\marginpar[{\raisebox{-4pt}{{\raggedleft{\maniculefont{☛}}}}}]{{\raisebox{-4pt}{\maniculefont{☚}}}}}
Allerdings wirkt dann
\raggedleft
nicht mehr. Also weiter Klammern sortieren...Zu viele Klammern
TeX verwendet geschweifte Klammern sowohl für Argumente als auch für Gruppen. Wenn Du nun innerhalb der Argumentklammern weitere Klammerpaare einsetzt, dann begrenzen diese nicht mehr das Argument, sondern eine Gruppe innerhalb des Arguments. Umschaltbefehle wie
\raggedleft
verlieren aber am Ende der Gruppe ihre Wirkung. Gleichzeitig wird ein Absatz mit den Einstellungen gesetzt, die am Ende des Absatzes gelten. Das gilt auch für den Absatz einer Randnotiz. Daher: Geschweifte Klammern nicht wahllos setzen, sondern gezielt dort, wo sie gebraucht werden. Darüber hinaus ist eine\raisebox
eine horizontale Box. Innerhalb einer horizontalen Box sind aber Absatzeinstellungen – und darum handelt es sich letztlich bei\raggedleft
und\raggedright
– weitgehend sinnlos bis unsinnig. Tatsächlich will man mit\raggedleft
ja auch nicht die vertikale Verschiebung verändern, sondern die Randnotiz insgesamt. Also gehört die Anweisung direkt in die äußerte Ebene der Randnotiz und damit des jeweiligen Arguments von\marginpar
:Ja, die Zeilenumbrüche (einschl. der
%
-Zeichen) und die Einrückung habe ich absichtlich so gewählt. Die sind zwar für LaTeX unerheblich (bis auf die%
-Zeichen), aber für den Autor eine echte Hilfe.Ah!
Auf die Idee,
\raggedleft
vor\raisebox{-4pt}
zu setzen bin ich nach einigem Experimentieren auch gekommen -- allerdings fehlte mir die obige Erklärung :)Eine letzte Frage: Warum
\raggedright
? Ich habe es bisher weggelassen, und das Verhalten war dasselbe.Konsequente Konsistenz
Du willst, dass im rechten Rand linksbündig gesetzt wird. In der Voreinstellung wird im Rand aber im Blocksatz gesetzt. Bei einem einzelnen Zeichen sieht man zwar keinen Unterschied zwischen Blocksatz und linksbündigem Flattersatz, aber es ist konsequent das trotzdem explizit vorzugeben und sei es vielleicht nur, weil der nächste, der den Code übernimmt, vielleicht doch mehr als nur ein Zeichen setzen möchte. Wobei Selbstdidaktik auch kein schlechtes Argument wäre. Tatsächlich wären beispielsweise auch nicht alle der in meinem Code gezeigten
%
notwendig. Sich anzugewöhnen, diese an bestimmten Stellen konsequent zu setzen, ist aber im Endeffekt vorteilhaft.