Se você não se importa por que estou perguntando, pule a primeira seção....
Problema:
- Nenhuma forma em versalete e itálico foi definida no LaTeX 2e.
\textsc{\textit{small-caps italic}}
não produziu letras maiúsculas em itálico, mesmo que uma forma de letras maiúsculas em itálico fosse definida.
Solução anterior:pacotes diferentes usavam códigos de formato diferentes para versalete itálico e/ou versalete oblíqua. Variações incluídas (pelo menos si
) scit
e scsl
. Alguns pacotes de suporte também suportavam mudanças de forma em camadas, para que \textsc{\textit{small-caps italic} small-caps} \textit{italic \textsc{small-caps}}
se comportassem conforme esperado.
Para tornar isso mais fácil, alguns pacotes font-support-package-support ofereceram aos autores dos pacotes font-support estruturas gerais que definiam as formas e hackeavam os comandos do LaTeX para que as mudanças de forma em camadas funcionassem. font-axes
, nfssext
e nfssext-cfr
são exemplos.
Solução mais recente:LaTeX define scit
e suporta camadas de formas itálicas, versaletes e oblíquas.
Problema:Se você mantiver (em algum sentido degenerado de 'manter') um pacote de suporte de fontes que usou si
e scsl
, digamos, as alterações de forma para suas fontes suportadas serão interrompidas ou as alterações de forma para fontes suportadas pela configuração padrão serão interrompidas.
Solução:Refaça os .fd
arquivos para usar scit
e elimine o suporte específico do pacote, contando com a estrutura padrão.
Problema:Se você mantiver (em um sentido ainda mais degenerado de 'manter') um pacote font-support-package-support oferecendo uma estrutura geral para pacotes de suporte a fontes que suportam si
e scsl
, digamos, e descartar o código que suporta essas formas, então você pode quebrar pacotes de suporte a fontes sobre os quais você não tem controle e cuja existência você pode ignorar. Se você não descartar o código, você quebrará o suporte para fontes que dependem da nova estrutura padrão, que pode coexistir em documentos com fontes que requerem a antiga.
Solução ideal:Usando sua máquina do tempo, volte e use scit
versalete em itálico. Então você pode apontar para sua documentação e alegar que sempre disse às pessoas para usarem scit
e que não é sua culpa si
e/ou scsl
não funciona.
Problema:Financiamento para máquina do tempo não disponível.
Solução menos ideal:Adapte seu pacote font-support-package-support para suportar si
,scit
e scsl
.
Ao revisar nfssext-cfr
, gostaria de testar quatro formatos de destino ao lidar com mudanças de formato em versalete/itálico/oblíqua em camadas. Suspeito que a única maneira de fazer isso será semelhante ao que nfssext
era originalmente, mas não tenho certeza de como garantir que isso funcione bem com a estrutura LaTeX atual.
Por exemplo, a maneira mais direta de implementar o suporte para versalete itálico ( si
) e oblíquo ( scsl
) seria
\DeclareFontShapeChangeRule {it}{sc}{si}{scsl}
\DeclareFontShapeChangeRule{sl}{sc}{scsl}{si}
\DeclareFontShapeChangeRule {sc}{it} {si} {scsl}
\DeclareFontShapeChangeRule {sc}{sl} {scsl} {si}
Mas se eu fizer isso, interromperei as alterações de forma para fontes que usam scit
em vez de si
e/ou scsl
.
Então, na ausência de uma máquina do tempo, o ideal seria ter algo como
\DeclareFontShapeChangeRule {it}{sc}{si}{scsl}{scit}
\DeclareFontShapeChangeRule{sl}{sc}{scsl}{si}{scit}
\DeclareFontShapeChangeRule {sc}{it} {si} {scsl}{scit}
\DeclareFontShapeChangeRule {sc}{sl} {scsl} {si}{scit}
mas, infelizmente, tal comando não existe. \DeclareFontShapeChangeRule
pode testar três alvos de formato, mas quatro estão além de seu poder.
Eu tentei o método consagrado de ignorar o problema por alguns anos, deixando o código parcialmente revisado fermentar e esperando ter uma ideia brilhante, mas meu cérebro até agora não conseguiu captar nem mesmo uma ideia mal iluminada.
Aqui está um MNWE (com comentários traduzidos!):
\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}
Responder1
O que há de errado em alterar o arquivo .fd da fonte em questão (se você o mantiver) e adicionar a scit
forma e, em seguida, criar um alias si
para essa forma (assim como muitos alias de fontes bx
para b
). Depois daquele documento antigo que uso explicitamente si
deveria continuar funcionando como antes, mas novos documentos poderiam simplesmente ser escritos \textsc{\itshape ...}
e funcionaria também.
Misturar as duas convenções não funcionaria necessariamente e produziria substituições, mas acho que é aceitável.
Eu não produziria regras de alteração porque, como Ulrike apontou, isso significaria que seu documento quebraria outros pacotes de fontes de maneiras estranhas. As regras de alteração são apenas para preâmbulo se você precisar ajustar um documento específico ou para configuração geral que normalmente só acontece como parte do kernel.
Responder2
Você não pode atualizar os arquivos fd para usar os novos nomes de formas padronizadas, então
fazer
\documentclass{article}
\usepackage[T1]{fontenc}
\DeclareFontShapeChangeRule {n}{si} {scit} {scsl}
\begin{document}
{\scshape Abc \textit{Abc}} {\fontshape{si}\selectfont Abc}
\end{document}
portanto, qualquer documento que acesse compostos como \scshape\textit{Abc}
acessará as letras maiúsculas em itálico por meio do novo mecanismo. A regra ShapeChange adicionada afetará apenas o código que estiver solicitando explicitamente a si
forma, portanto, não afetará nenhum documento que não a tenha usado anteriormente.
Você precisará de mais algumas regras para lidar com o caso em que a forma existente n
ainda não existe....