Wenn es Sie nicht interessiert, warum ich frage, überspringen Sie den ersten Abschnitt …
Problem:
- In LaTeX 2e wurde keine Kursivform für Kapitälchen definiert.
\textsc{\textit{small-caps italic}}
hat keine Kapitälchen-Kursivschrift erzeugt, selbst wenn eine Kapitälchen-Kursivform definiert wurde.
Frühere Lösung:Verschiedene Pakete verwendeten unterschiedliche Formcodes für Kapitälchen kursiv und/oder Kapitälchen schräg. Variationen umfassten (mindestens) si
, scit
und scsl
. Einige Support-Pakete unterstützten auch geschichtete Formänderungen, sodass \textsc{\textit{small-caps italic} small-caps} \textit{italic \textsc{small-caps}}
sich wie erhofft verhielt.
Um dies zu vereinfachen, boten einige Font-Support-Pakete den Autoren von Font-Support-Paketen allgemeine Frameworks an, die die Formen definierten und die Befehle von LaTeX hackten, sodass geschichtete Formänderungen funktionierten. font-axes
und nfssext
sind nfssext-cfr
Beispiele.
Neuere Lösung:LaTeX definiert scit
und unterstützt die Schichtung von Kursivschrift, Kapitälchen und schrägen Formen.
Problem:Wenn Sie ein Schriftarten-Unterstützungspaket pflegen (in einem degenerierten Sinn von „pflegen“), das beispielsweise si
und verwendet scsl
, schlagen entweder Formänderungen für Ihre unterstützten Schriftarten fehl oder Formänderungen für Schriftarten, die von der Standardkonfiguration unterstützt werden, schlagen fehl.
Lösung:Erstellen Sie die .fd
zu verwendenden Dateien erneut scit
und löschen Sie die paketspezifische Unterstützung, indem Sie sich auf das Standardframework verlassen.
Problem:Wenn Sie ein Font-Support-Paket pflegen (in einem noch degenerierteren Sinn von „pflegen“), das ein allgemeines Framework für Font-Support-Pakete bietet, das beispielsweise si
und unterstützt scsl
, und Sie den Code löschen, der diese Formen unterstützt, dann können Sie Font-Support-Pakete zerstören, über die Sie keine Kontrolle haben und deren Existenz Ihnen möglicherweise nicht bewusst ist. Wenn Sie den Code nicht löschen, zerstören Sie die Unterstützung für Fonts, die auf dem neuen Standard-Framework basieren, das in Dokumenten möglicherweise mit Fonts koexistiert, die das alte erfordern.
Ideale Lösung:Gehen Sie mit Ihrer Zeitmaschine zurück und verwenden Sie scit
für kursive Kapitälchen. Dann können Sie auf Ihre Dokumentation verweisen und behaupten, Sie hätten den Leuten immer gesagt, sie sollten es verwenden scit
, und es sei nicht Ihre Schuld si
und/oder scsl
es funktioniere nicht.
Problem:Finanzierung für Zeitmaschine nicht verfügbar.
Weniger ideale Lösung:Passen Sie Ihr Font-Support-Package-Support-Paket an, um zu unterstützen si
,scit
Und scsl
.
Bei der Überarbeitung nfssext-cfr
möchte ich vier Zielformen testen, wenn es um geschichtete Kapitälchen/Kursiv-/Schrägschrift-Formänderungen geht. Ich vermute, dass die einzige Möglichkeit, dies zu tun, darin besteht, ähnlich wie nfssext
ursprünglich auszusehen, aber ich bin mir nicht sicher, wie ich sicherstellen kann, dass dies gut mit dem aktuellen LaTeX-Framework funktioniert.
Der einfachste Weg, die Unterstützung für Kapitälchen kursiv ( si
) und schräg ( scsl
) zu implementieren, wäre beispielsweise
\DeclareFontShapeChangeRule {it}{sc}{si}{scsl}
\DeclareFontShapeChangeRule{sl}{sc}{scsl}{si}
\DeclareFontShapeChangeRule {sc}{it} {si} {scsl}
\DeclareFontShapeChangeRule {sc}{sl} {scsl} {si}
Wenn ich das jedoch tue, werden Formänderungen für Schriftarten, die scit
anstelle von si
und/oder verwenden, unterbrochen scsl
.
Wenn ich also keine Zeitmaschine hätte, hätte ich im Idealfall so etwas wie
\DeclareFontShapeChangeRule {it}{sc}{si}{scsl}{scit}
\DeclareFontShapeChangeRule{sl}{sc}{scsl}{si}{scit}
\DeclareFontShapeChangeRule {sc}{it} {si} {scsl}{scit}
\DeclareFontShapeChangeRule {sc}{sl} {scsl} {si}{scit}
aber leider gibt es einen solchen Befehl nicht. \DeclareFontShapeChangeRule
kann auf drei Formziele testen, aber vier liegen außerhalb seiner Möglichkeiten.
Ich habe es ein paar Jahre lang mit der altbewährten Methode versucht, das Problem zu ignorieren, den teilweise überarbeiteten Code ruhen zu lassen und zu hoffen, dass mir eine zündende Idee einfällt, aber meinem Gehirn ist es bisher nicht gelungen, auch nur eine ansatzweise zu erkennen.
Hier ist ein MNWE (mit übersetzten Kommentaren!):
\documentclass{article}
\usepackage[T1]{fontenc}
\makeatletter
\renewcommand \rmdefault {clm}
\renewcommand \sfdefault {cmr}
\newcommand*{\sidefault}{si}% anniffiniedig
% better to test si & then scit but I don't know how to do that with the new stuff ...
\DeclareRobustCommand{\sishape}{%
\not@math@alphabet\sishape\relax
\fontshape\sidefault\selectfont}
% it would be better to try si, scit and scsl, but that doesn't seem possible
% the need for overwriting could be avoided by changing the .fd files, but that would break code I don't know about ...
\DeclareFontShapeChangeRule {it}{sc}{si}{scsl}% current; request (& third); first choice; second choice
\DeclareFontShapeChangeRule{sl}{sc}{scsl}{si}
\DeclareFontShapeChangeRule {sc}{it} {si} {scsl}
\DeclareFontShapeChangeRule {sc}{sl} {scsl} {si}
% the following are unproblematic because they don't interfere with anything
\DeclareFontShapeChangeRule {si}{it} {si} {}
\DeclareFontShapeChangeRule {si}{sl} {scsl} {si}
\DeclareFontShapeChangeRule {scsl}{sl} {scsl} {}
\DeclareFontShapeChangeRule {scsl}{it} {si} {scsl}
\DeclareFontShapeChangeRule {si}{sc} {si} {}
\DeclareFontShapeChangeRule {si}{ulc} {it} {}
\DeclareFontShapeChangeRule {si}{up} {sc} {}
% avoid spurious warnings for the example
\DeclareFontShapeChangeRule {n}{up}{n}{}
\DeclareFontShapeChangeRule {sc}{up}{n}{}
\DeclareFontShapeChangeRule {it}{up}{n}{}
% \def\DeclareFontShapeChangeRule #1#2#3#4{% latex.ltx
% \@namedef{shape@#1@#2}{{#3}{#4}}}
% \DeclareFontShapeChangeRule abcd % \shape@a@b -> {c}{d}
\makeatother
\begin{document}
\texttt{clm}:
\rmfamily\sishape Italic Small-Caps
\upshape Small-Caps
\itshape Italic Small-Caps
\normalfont Upright standard
\itshape\scshape Italic Small-Caps
\normalfont \slshape\scshape Slanted Small-Caps -> Italic
\texttt{cmr}:
\sffamily\sishape Italic Small-Caps
\upshape Small-Caps
\itshape Italic Small-Caps
\normalfont Upright standard
\itshape\scshape Italic Small-Caps
\normalfont \slshape\scshape Slanted Small-Caps -> Italic
\end{document}
Antwort1
Was ist falsch daran, die .fd-Datei der betreffenden Schriftart zu ändern (sofern Sie sie pflegen), die scit
Form hinzuzufügen und dann die si
Form mit dieser Form zu verknüpfen (genau wie viele Schriftarten bx
mit b
). Danach si
sollten alte Dokumente, die explizit verwendet werden, weiterhin wie zuvor funktionieren, aber neue Dokumente könnten einfach schreiben \textsc{\itshape ...}
und es würde auch funktionieren.
Das Mischen beider Konventionen würde nicht unbedingt funktionieren und zu Ersetzungen führen, aber ich denke, das ist akzeptabel.
Ich würde keine Änderungsregeln erstellen, da dies, wie Ulrike anmerkte, bedeuten würde, dass Ihr Dokument andere Schriftpakete auf seltsame Weise beschädigt. Die Änderungsregeln gelten nur für die Präambel, wenn Sie ein bestimmtes Dokument anpassen müssen, oder für die allgemeine Einrichtung, die normalerweise nur als Teil des Kernels erfolgt.
Antwort2
Können Sie die fd-Dateien nicht aktualisieren, um die neuen standardisierten Formnamen zu verwenden?
Tun
\documentclass{article}
\usepackage[T1]{fontenc}
\DeclareFontShapeChangeRule {n}{si} {scit} {scsl}
\begin{document}
{\scshape Abc \textit{Abc}} {\fontshape{si}\selectfont Abc}
\end{document}
Daher \scshape\textit{Abc}
greift jedes Dokument, das auf zusammengesetzte Formen zugreift, über den neuen Mechanismus auf die kursiven Kapitälchen zu. Die hinzugefügte ShapeChange-Regel wirkt sich nur auf Code aus, der die si
Form explizit anfordert, und wirkt sich daher nicht auf Dokumente aus, die diese Form nicht zuvor verwendet haben.
Sie benötigen einige weitere Regeln für den Fall, dass die vorhandene Form nicht n
… ist.