Я хочу создать команду, которая печатает аргумент шрифтом на один пункт меньше текущего.
Например, если в документе шрифт 11pt, команда должна печатать с 10pt. Если в документе шрифт 10pt, я хочу, чтобы команда печатала с 9pt.
Я не хочу, чтобы это было связано с размером шрифта документа. Если команда используется в среде, которая определяет шрифт как Xpt, я хочу, чтобы команда создавала текст с размером шрифта (X-1)pt
решение1
решение2
Текущий размер шрифта сохраняется в макросе \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}
С масштабируемым шрифтом, скажем \usepackage{baskervald}
,
Примечание: \fontname\font
используется только для того, чтобы показать, какой шрифт используется в данный момент. В случае ybvr8t
нет at
пункта, поскольку шрифт имеет свой естественный размер 10pt.
решение3
Я лично делаю это с моим любимым fontspec
и XelaTex
. Вот пример с Libertine (потому что это красиво).
\usepackage{fontspec}
\setmainfont[Ligatures=TeX,]{Linux Libertine O}
\newfontfamily{\ninetypercent}[Scale=0.90]{Linux Libertine O}
\newcommand{\ninety}[1]{{\ninetypercent #1}
Сделав это, вы \ninety{text}
будете на 10% меньше, чем ваш базовый шрифт. Чтобы получить размер 10pt из 11pt, вам просто нужно сделать быстрые подсчеты и установить параметр масштабирования на 0,909, если вы хотите быть сверхточными.
Таким образом, вы можете уменьшить любой размер шрифта на любой коэффициент (это может быть 3,5%, 50% и т. д.), и он всегда будет соответствовать базовому размеру шрифта.
Согласен, что это немного излишне, но fontspec
в нем есть много интересных функций, с которыми можно поиграться.
решение4
Улучшение того, что предложил egreg, можно сделать параметрическим следующим образом:
\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}