Quero fazer um comando que imprima o argumento com uma fonte um ponto menor que a atual.
Por exemplo, se um documento tiver fonte 11pt, o comando deverá imprimir com 10pt. Se o documento tiver fonte 10pt, quero que o comando imprima com fonte 9pt.
Não quero que isso esteja vinculado ao tamanho da fonte do documento. Se o comando for utilizado em um ambiente que define a fonte como Xpt, quero que o comando produza um texto com o tamanho da fonte (X-1)pt
Responder1
Responder2
O tamanho da fonte atual é armazenado na 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}
Com uma fonte escalonável, digamos \usepackage{baskervald}
,
Nota: \fontname\font
é usado apenas para mostrar qual fonte está sendo usada atualmente. No caso ybvr8t
não há at
cláusula porque a fonte está no tamanho natural de 10pt.
Responder3
Eu pessoalmente faço isso com meu amado fontspec
e XelaTex
. Aqui está um exemplo com Libertine (porque é lindo).
\usepackage{fontspec}
\setmainfont[Ligatures=TeX,]{Linux Libertine O}
\newfontfamily{\ninetypercent}[Scale=0.90]{Linux Libertine O}
\newcommand{\ninety}[1]{{\ninetypercent #1}
Fazendo isso, sua fonte \ninety{text}
será 10% menor que a fonte base. Para obter um tamanho de 10 pontos a partir de 11 pontos, basta fazer uma matemática rápida e definir o parâmetro de escala para 0,909 se quiser ser ultra preciso.
E dessa forma você pode diminuir qualquer tamanho de fonte pelo fator que desejar (que pode ser 3,5%, 50%, etc...) e sempre será relativo ao tamanho da fonte base.
Eu concordo que é um pouco exagerado, mas fontspec
tem muitos recursos interessantes para brincar.
Responder4
Uma melhoria em relação ao que o egreg propôs, é possível parametrizá-lo da seguinte forma:
\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}