3 つのターゲットではなく 4 つのターゲットをテストする \DeclareFontShapeChangeRule と同等のことを実行するにはどうすればよいですか?

3 つのターゲットではなく 4 つのターゲットをテストする \DeclareFontShapeChangeRule と同等のことを実行するにはどうすればよいですか?

私がなぜ質問しているのか気にしないのであれば、最初のセクションを飛ばしてください。


問題:

  1. LaTeX 2e では小文字斜体の形状は定義されていません。
  2. \textsc{\textit{small-caps italic}}スモールキャップス斜体の形状が定義されている場合でも、スモールキャップス斜体を生成しませんでした。

以前の解決策:異なるパッケージでは、小文字斜体や小文字斜体に異なる形状コードが使用されていました。バリエーションには、(少なくとも) siscit、 が含まれていscslました。一部のサポート パッケージでは、 が期待どおりに動作するように、形状の階層的変更もサポートされていました\textsc{\textit{small-caps italic} small-caps} \textit{italic \textsc{small-caps}}

これを簡単にするために、一部の font-support-package-support パッケージは、形状を定義し、LaTeX のコマンドをハッキングして階層化された形状の変更が機能する一般的なフレームワークを font-support パッケージの作成者に提供しました。font-axesnfssextおよびnfssext-cfrが例です。

新しいソリューション:scitLaTeX は、斜体、小文字、斜体のレイヤーを定義およびサポートします。

問題:siたとえば、とを使用するフォント サポート パッケージを保守する場合 (「保守」の退化した意味で) scsl、サポートされているフォントの形状変更が壊れるか、またはデフォルト構成でサポートされているフォントの形状変更が壊れます。

解決:.fd使用するファイルを再作成しscit、標準フレームワークに依存してパッケージ固有のサポートを削除します。

問題:siたとえば、とをサポートするフォント サポート パッケージの一般的なフレームワークを提供する font-support-package-support パッケージを保守 (「保守」のさらに退化した意味で) しscsl、それらの図形をサポートするコードを削除すると、制御できず、その存在に気付いていないフォント サポート パッケージが壊れる可能性があります。コードを削除しないと、新しい標準フレームワークに依存するフォントのサポートが壊れ、古いものを必要とするフォントと文書が共存する可能性があります。

理想的な解決策:タイムマシンを使って、戻ってscit斜体の小文字を使用します。その後、ドキュメントを示して、常に使用するように指示しておりscit、それが自分のせいではないsi、またはscsl機能しないと主張します。

問題:タイムマシンのための資金が利用できません。

あまり理想的ではない解決策:font-support-package-supportパッケージを適応させてサポートしますsiscit そして scsl


を改訂する際にnfssext-cfr、レイヤー化された小文字大文字/斜体/斜体の形状変更を処理するときに、4 つのターゲット形状をテストしたいと思います。これを行う唯一の方法は、nfssext元のものと似たものになると思いますが、現在の LaTeX フレームワークでうまく機能するようにするにはどうすればよいかわかりません。

siたとえば、小文字の斜体( )と斜体( )のサポートを実装する最も簡単な方法scslは、

\DeclareFontShapeChangeRule {it}{sc}{si}{scsl}
\DeclareFontShapeChangeRule{sl}{sc}{scsl}{si}
\DeclareFontShapeChangeRule {sc}{it} {si} {scsl}
\DeclareFontShapeChangeRule {sc}{sl} {scsl} {si}

しかし、そうすると、scitではなく およびsi/または を使用するフォントの形状変更が壊れてしまいますscsl

だから、タイムマシンがなければ、私は理想的には次のようなものが欲しい。

\DeclareFontShapeChangeRule {it}{sc}{si}{scsl}{scit}
\DeclareFontShapeChangeRule{sl}{sc}{scsl}{si}{scit}
\DeclareFontShapeChangeRule {sc}{it} {si} {scsl}{scit}
\DeclareFontShapeChangeRule {sc}{sl} {scsl} {si}{scit}

しかし、残念ながら、そのようなコマンドは存在しません。\DeclareFontShapeChangeRule3 つの形状ターゲットをテストできますが、4 つはその能力を超えています。

私は、数年間問題を無視し、部分的に改訂されたコードを熟成させて、何か良いアイデアが浮かぶことを期待するという昔ながらの方法を試してきましたが、これまでのところ、かすかなアイデアさえも思い浮かびません。

以下は MNWE です (翻訳されたコメント付き!)。

\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}

答え1

問題のフォントの .fd ファイルを変更し (維持している場合)、シェイプを追加してscitsiそのシェイプにシェイプをエイリアスする (多くのフォントがbxにエイリアスするのと同じようにb) と、何が問題になるのでしょうか。その後、明示的に を使用する古いドキュメントはsi引き続き以前と同じように機能しますが、新しいドキュメントでは単に書き込むだけで\textsc{\itshape ...}機能します。

両方の規則を混在させると、必ずしも機能せず、代替が生まれますが、それは許容できると思います。

Ulrike が指摘したように、変更ルールを作成すると、ドキュメントが他のフォント パッケージを奇妙な形で壊してしまうことになるため、私は変更ルールを作成しません。変更ルールは、特定のドキュメントを調整する必要がある場合、または通常はカーネルの一部としてのみ行われる一般的なセットアップの場合のみ、プリアンブル用です。

答え2

fdファイルを更新して、新しい標準化されたシェイプ名を使用することはできませんか?

する

\documentclass{article}


\usepackage[T1]{fontenc}
\DeclareFontShapeChangeRule {n}{si} {scit}      {scsl}
\begin{document}

{\scshape Abc \textit{Abc}} {\fontshape{si}\selectfont Abc}

\end{document}

ここに画像の説明を入力してください

そのため、複合文字 ( など) にアクセスするすべてのドキュメントは、\scshape\textit{Abc}新しいメカニズムを介して斜体の小文字大文字にアクセスします。追加された ShapeChange ルールは、明示的に図形を要求しているコードにのみ影響するsiため、以前にそれを使用していなかったドキュメントには影響しません。

既存の形状がそうでない場合の処理​​には、さらにいくつかのルールが必要になりますn

関連情報