¿Cómo puedo hacer el equivalente de \DeclareFontShapeChangeRule que prueba 4 objetivos en lugar de 3?

¿Cómo puedo hacer el equivalente de \DeclareFontShapeChangeRule que prueba 4 objetivos en lugar de 3?

Si no te importa por qué te lo pregunto, sáltate la primera sección...


Problema:

  1. No se definió ninguna forma de cursiva en minúscula en LaTeX 2e.
  2. \textsc{\textit{small-caps italic}}no produjo cursiva en versalitas incluso si se definió una forma de cursiva en versalitas.

Solución anterior:diferentes paquetes utilizaban diferentes códigos de forma para versalitas en cursiva y/o versalitas oblicuas. Las variaciones incluyeron (al menos si) scity scsl. Algunos paquetes de soporte también admitían cambios de forma en capas para que \textsc{\textit{small-caps italic} small-caps} \textit{italic \textsc{small-caps}}se comportaran como se esperaba.

Para hacer esto más fácil, algunos paquetes de soporte de fuentes ofrecieron a los autores de los paquetes de soporte de fuentes marcos generales que definían las formas y pirateaban los comandos de LaTeX para que los cambios de formas en capas funcionaran. font-axes, nfssexty nfssext-cfrson ejemplos.

Solución más nueva:LaTeX define scity admite capas de cursiva, versalitas y formas oblicuas.

Problema:Si mantiene (en algún sentido degenerado de 'mantener') un paquete de soporte de fuentes que usa siy scsl, digamos, los cambios de forma para las fuentes admitidas se romperán o los cambios de forma para las fuentes admitidas por la configuración predeterminada se romperán.

Solución:Rehaga los .fdarchivos para usarlos scity elimine el soporte específico del paquete, basándose en el marco estándar.

Problema:Si mantiene (en un sentido aún más degenerado de 'mantener') un paquete de soporte de fuentes que ofrece un marco general para paquetes de soporte de fuentes que admite siy scsl, digamos, y elimina el código que respalda esas formas, entonces puede romper paquetes de soporte de fuentes sobre los cuales usted no tiene control y cuya existencia puede ignorar. Si no elimina el código, dejará de admitir fuentes que dependen del nuevo marco estándar, que puede coexistir en documentos con fuentes que requieren el antiguo.

Solución ideal:Usando su máquina del tiempo, regrese y use scitcursiva en minúsculas. Luego puede señalar su documentación y afirmar que siempre le dijo a la gente que la usara scity que no es culpa suya siy/o scslno funciona.

Problema:Financiamiento para la máquina del tiempo no disponible.

Solución menos ideal:Adapte su paquete font-support-package-support para admitir si,scit y scsl.


Al revisar nfssext-cfr, me gustaría probar cuatro formas de destino cuando se trata de cambios de forma en versalitas/cursiva/oblicuos en capas. Sospecho que la única forma de hacer esto será similar a la que nfssexttenía originalmente, pero no estoy seguro de cómo asegurarme de que funcione bien con el marco LaTeX actual.

Por ejemplo, la forma más sencilla de implementar el soporte para minúsculas en cursiva ( si) y oblicua ( scsl) sería

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

Pero si hago eso, cancelaré los cambios de forma para las fuentes que usan sciten lugar de siy/o scsl.

Entonces, en ausencia de una máquina del tiempo, lo ideal sería tener 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}

pero, lamentablemente, tal comando no existe. \DeclareFontShapeChangeRulePuede probar tres objetivos de forma, pero cuatro están más allá de su poder.

He probado el método tradicional de ignorar el problema durante algunos años, dejando fermentar el código parcialmente revisado y esperando tener una idea brillante, pero hasta ahora mi cerebro no ha podido captar ni siquiera una idea con poca luz.

Aquí hay un MNWE (¡con comentarios traducidos!):

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

Respuesta1

¿Qué hay de malo en cambiar el archivo .fd de la fuente en cuestión (si lo mantiene) y agregar la scitforma y luego asignarle un alias sia esa forma (al igual que muchas fuentes alias bxa b)? Después de ese documento antiguo que se usa explícitamente sidebería continuar funcionando como antes, pero los documentos nuevos podrían simplemente escribirse \textsc{\itshape ...}y también funcionarían.

Mezclar ambas convenciones no necesariamente funcionaría ni produciría sustituciones, pero creo que es aceptable.

No produciría reglas de cambio porque, como señaló Ulrike, eso significaría que su documento rompe otros paquetes de fuentes de maneras extrañas. Las reglas de cambio son sólo para el preámbulo si necesita ajustar un documento específico o para una configuración general que normalmente sólo ocurre como parte del kernel.

Respuesta2

¿No puedes actualizar los archivos fd para usar los nuevos nombres de formas estandarizados?

hacer

\documentclass{article}


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

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

\end{document}

ingrese la descripción de la imagen aquí

por lo que cualquier documento que acceda a compuestos como \scshape\textit{Abc}accederá a las versalitas en cursiva a través del nuevo mecanismo. La regla ShapeChange agregada solo afectará el código que solicita explícitamente la siforma, por lo que no afectará a ningún documento que no la haya usado previamente.

Necesitará algunas reglas más para manejar el caso en el que la forma existente no lo es, npero...

información relacionada