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

이를 더 쉽게 만들기 위해 일부 글꼴 지원 패키지 지원 패키지는 글꼴 지원 패키지 작성자에게 모양을 정의하고 LaTeX 명령을 해킹하여 계층화된 모양 변경이 작동하도록 하는 일반 프레임워크를 제공했습니다. font-axes, nfssextnfssext-cfr예시입니다.

최신 솔루션:scitLaTeX는 기울임꼴, 작은 대문자 및 기울어진 모양의 레이어를 정의 하고 지원합니다.

문제:si예를 들어 및 를 사용하는 글꼴 지원 패키지를 유지하는 경우('유지'라는 퇴보적인 의미에서) scsl지원되는 글꼴의 모양 변경이 중단되거나 기본 구성에서 지원되는 글꼴의 모양 변경이 중단됩니다.

해결책:표준 프레임워크에 따라 패키지별 지원을 .fd사용하고 삭제하려면 파일을 다시 실행하세요 .scit

문제:및 를 지원하는 글꼴 지원 패키지에 대한 일반적인 프레임워크를 제공하는 글꼴 지원 패키지 지원 패키지를 유지 관리하고('유지 관리'의 좀 더 타락한 의미에서) si해당 scsl모양을 지원하는 코드를 삭제하면 사용자가 제어할 수 없고 존재 여부도 인식할 수 없는 글꼴 지원 패키지가 손상될 수 있습니다. 코드를 삭제하지 않으면 새로운 표준 프레임워크에 의존하는 글꼴에 대한 지원이 중단되며, 이전 표준 프레임워크가 필요한 글꼴이 있는 문서에 공존할 수 있습니다.

이상적인 솔루션:타임머신을 사용하여 돌아가서 scit이탤릭체 작은 대문자를 사용하세요. 그런 다음 문서를 가리키고 항상 사람들에게 사용하라고 말했는데 scit그것이 귀하의 잘못이 아니 si거나 scsl작동하지 않는다고 주장할 수 있습니다.

문제:타임머신에 대한 자금 지원이 불가능합니다.

덜 이상적인 솔루션:을 지원하도록 글꼴 지원 패키지 지원 패키지를 조정하세요 si.scit 그리고 scsl.


을 개정하면서 nfssext-cfr레이어형 작은 대문자/이탤릭체/비스듬한 모양 변경을 처리할 때 네 가지 대상 모양을 테스트하고 싶습니다. 이 작업을 수행하는 유일한 방법은 원래 했던 것과 유사하게 보일 것이라고 생각 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대신 사용하는 글꼴의 모양 변경이 중단됩니다 .siscsl

따라서 타임머신이 없다면 이상적으로는 다음과 같은 것이 있을 것입니다.

\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 파일을 변경하고(유지 관리하는 경우) 모양을 추가한 scit다음 해당 모양에 모양의 별칭을 지정하는 데 문제가 있습니다(많은 글꼴의 별칭이 에 있는 si것처럼 ). 명시적으로 사용하는 이전 문서는 이전과 같이 계속 작동해야 하지만 새 문서는 작성만 하면 작동할 수도 있습니다.bxbsi\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하지만...

관련 정보