Quiero crear un comando que imprima el argumento con una fuente que sea un punto más pequeña que la actual.
Por ejemplo, si un documento tiene una fuente de 11 puntos, el comando debe imprimirse con una fuente de 10 puntos. Si el documento tiene una fuente de 10 puntos, quiero que el comando se imprima con una fuente de 9 puntos.
Sin embargo, no quiero que esto esté vinculado al tamaño de fuente del documento. Si el comando se usa en un entorno que define la fuente como Xpt, quiero que el comando produzca un texto con el tamaño de fuente (X-1)pt.
Respuesta1
Respuesta2
El tamaño de fuente actual se almacena en la macro \f@size
:
\RequirePackage{fix-cm} % or use a scalable font
\documentclass{article}
\makeatletter
\newcommand{\oneptsmaller}[1]{%
\begingroup
\fontsize{\dimexpr\f@size pt-1pt}{\f@baselineskip}\selectfont
#1%
\endgroup
}
\makeatother
\begin{document}
\fontname\font\ \oneptsmaller{\fontname\font}
\large
\fontname\font\ \oneptsmaller{\fontname\font}
\footnotesize
\fontname\font\ \oneptsmaller{\fontname\font}
\end{document}
Con una fuente escalable, por ejemplo \usepackage{baskervald}
,
Nota: \fontname\font
se utiliza sólo para mostrar qué fuente se utiliza actualmente. En el caso de ybvr8t
no hay at
cláusula porque la fuente tiene su tamaño natural de 10 puntos.
Respuesta3
Yo personalmente lo hago con mi amada fontspec
y XelaTex
. Aquí hay un ejemplo con Libertine (porque es hermoso).
\usepackage{fontspec}
\setmainfont[Ligatures=TeX,]{Linux Libertine O}
\newfontfamily{\ninetypercent}[Scale=0.90]{Linux Libertine O}
\newcommand{\ninety}[1]{{\ninetypercent #1}
Al hacer esto, \ninety{text}
será un 10% más pequeño que su fuente base. Para obtener un tamaño de 10 puntos a partir de 11 puntos, solo debe hacer un cálculo rápido y establecer el parámetro de escala en 0,909 si desea ser ultra preciso.
Y de esa manera puedes disminuir cualquier tamaño de fuente según el factor que desees (que puede ser 3,5%, 50%, etc...) y siempre será relativo a tu tamaño de fuente base.
Estoy de acuerdo en que es un poco excesivo, pero fontspec
tiene muchas funciones muy interesantes con las que jugar.
Respuesta4
Una mejora a lo propuesto por egreg, es posible tenerlo paramétrico de la siguiente manera:
\documentclass[12pt]{article}
%: ==== N pt smaller
\makeatletter
\newcommand{\hbFontSmaller}[2]{%
\begingroup
\fontsize{\dimexpr\f@size pt-#1pt}{\f@baselineskip}\selectfont
#2%
\endgroup
}
\makeatother
% ====
\begin{document}
Abcde
\hbFontSmaller{1}{Abcde}
\hbFontSmaller{2}{Abcde}
\hbFontSmaller{3}{Abcde}
\hbFontSmaller{4}{Abcde}
\hbFontSmaller{5}{Abcde}
\hbFontSmaller{6}{Abcde}
\hbFontSmaller{7}{Abcde}
\hbFontSmaller{8}{Abcde}
Abcde
\end{document}