Si no te importa por qué te lo pregunto, sáltate la primera sección...
Problema:
- No se definió ninguna forma de cursiva en minúscula en LaTeX 2e.
\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
) scit
y 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
, nfssext
y nfssext-cfr
son ejemplos.
Solución más nueva:LaTeX define scit
y 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 si
y 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 .fd
archivos para usarlos scit
y 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 si
y 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 scit
cursiva en minúsculas. Luego puede señalar su documentación y afirmar que siempre le dijo a la gente que la usara scit
y que no es culpa suya si
y/o scsl
no 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 nfssext
tení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 scit
en lugar de si
y/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. \DeclareFontShapeChangeRule
Puede 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 scit
forma y luego asignarle un alias si
a esa forma (al igual que muchas fuentes alias bx
a b
)? Después de ese documento antiguo que se usa explícitamente si
deberí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}
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 si
forma, 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, n
pero...