Wie kann ich das Äquivalent von \DeclareFontShapeChangeRule erreichen, das 4 statt 3 Ziele testet?

Wie kann ich das Äquivalent von \DeclareFontShapeChangeRule erreichen, das 4 statt 3 Ziele testet?

Wenn es Sie nicht interessiert, warum ich frage, überspringen Sie den ersten Abschnitt …


Problem:

  1. In LaTeX 2e wurde keine Kursivform für Kapitälchen definiert.
  2. \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, scitund 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-axesund nfssextsind nfssext-cfrBeispiele.

Neuere Lösung:LaTeX definiert scitund 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 siund 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 .fdzu verwendenden Dateien erneut scitund 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 siund 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 scitfü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 siund/oder scsles 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-cfrmö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 nfssextursprü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 scitanstelle von siund/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. \DeclareFontShapeChangeRulekann 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 scitForm hinzuzufügen und dann die siForm mit dieser Form zu verknüpfen (genau wie viele Schriftarten bxmit b). Danach sisollten 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}

Bildbeschreibung hier eingeben

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 siForm 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.

verwandte Informationen