Уменьшить размер шрифта на один пункт

Уменьшить размер шрифта на один пункт

Я хочу создать команду, которая печатает аргумент шрифтом на один пункт меньше текущего.

Например, если в документе шрифт 11pt, команда должна печатать с 10pt. Если в документе шрифт 10pt, я хочу, чтобы команда печатала с 9pt.

Я не хочу, чтобы это было связано с размером шрифта документа. Если команда используется в среде, которая определяет шрифт как Xpt, я хочу, чтобы команда создавала текст с размером шрифта (X-1)pt

решение1

Вы также можете использовать пакет relsize, который позволяет то, что вам нужно. Рассмотрим этот MWE:

\documentclass{article}
\usepackage{relsize}
\begin{document}
This is normal size font.

\smaller

And this is one point smaller.
\end{document}

введите описание изображения здесь

решение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}  

Связанный контент