Что делает \rmfamily или как отменить объявление типа \em и \bfseries?

Что делает \rmfamily или как отменить объявление типа \em и \bfseries?

Короткий пример ниже показывает, что \bfseriesимеет свой эффект, но он накладывается на \emэффект . Если \rmfamilyпросто означает "ничего не добавлять", это также объясняет, почему он не имеет принципиально никакого эффекта. Однако мне интересно узнать, есть ли декларация \un-em/ \remove-previous-declarationsили что-то в этом роде

\documentclass{article}
\usepackage{amsmath}
\begin{document}
Hello, \em my name \bfseries is Enrico. \rmfamily And now what?
\end{document}

Я знаю, что могу ограничить выделенный текст, используя \emphкоманду вместо \emобъявления, но мне интересно узнать.

решение1

Вы можете использовать \emresetдля отмены эффекта \emи normalfontили \mdseriesдля отмены эффекта \bfseries.

\documentclass{article}
\begin{document}
Hello, \em my name \emreset\bfseries is Enrico. \normalfont And now what?
\end{document}

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

Или вы можете использовать {}для ограничения эффективной области действия.

\documentclass{article}
\begin{document}
Hello, {\em my name} {\bfseries is Enrico.} And now what?
\end{document}

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

Или просто используйте TextFontCommand с параметром.

\documentclass{article}
\begin{document}
Hello, \emph{my name} \textbf{is Enrico.} And now what?
\end{document}

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

решение2

Действие \rmfamilyне заключается в «ничегонеделании».

В модели NFSS, принятой LaTeX примерно в 1994 году, шрифты характеризуются четырьмя независимыми атрибутами:

  1. кодирование
  2. семья
  3. форма
  4. ряд

к которому мы могли бы добавить размер. Эти атрибуты независимы друг от друга. Кодировка немного своеобразна, и я не буду с ней разбираться.

Существует несколько предопределенных команд, которые изменяют один атрибут за раз:

  • \rmfamily, \sffamily,\ttfamily
  • \upshape, \itshape, \scshape,\slshape
  • \mdseries,\bfseries

Пакеты шрифтов, поддерживающие более сложные шрифты, могут определять другие команды для форм и серий.

Есть также еще одно «абстрактное» объявление, а именно \em, которое раньше определялось как «если текущий шрифт не наклонный, сделать \itshape, в противном случае сделать » \upshape. Значение было недавно изменено для поддержки ряда команд, чтобы иметь возможность по-разному указывать, что «выделение внутри выделения» реализуется. Давайте не будем усложнять, так как ваш пример прост.

Предполагая, что вы начинаете с \normalfont, вы получаете

Привет, <rmfamily/itshape/mdseries>меня зовут <rmfamily/itshape/bfseries>Энрико. <rmfamily/itshape/bfseries>И что теперь?

Последняя \rmfamilyкоманда ничего не делает, потому что семья уже была \rmfamily: вы ведь никогда не меняли семью, не так ли?

Команды, которая «отменяет последнее изменение», не существует, поскольку это не имеет смысла в модели NFSS: перечисленные выше команды никогда не следует использовать в документе, если только они невнутри группы. По общему правилу TeX группа ограничивает область выбора шрифта, поэтому, когда вы делаете что-то вроде

{\em text}

выбранный шрифт исчезает, \emи возвращается тот шрифт, который был в силе при запуске группы.

Обычно я предпочитаю \itshape textиспользовать курсив в ячейке выравнивания, поскольку \textit{text}это заставит LaTeX работать еще больше без всякой выгоды.

Да! У перечисленных выше команд есть аналог команды с аргументом:

  • \textrm, \textsf,\texttt
  • \textup, \textit, \textsc,\textsl
  • \textmd,\textbf
  • \emph

Последний — «абстрактный», и шрифт, который он выбирает, зависит от контекста, как и \em. Такие командыдолжны быть предпочтительнымидля изменения шрифта в тексте: используйте \emph{my name is Enrico}вместо {\em my ...}, поскольку он \emphтакже выполняет коррекцию курсива, которая может потребоваться до или после изменения шрифта.

Что делать, если вы хотите, чтобы выделение внутри выделения было реализовано как полужирный шрифт? Вы объявляете в преамбуле документа что-то вроде

\DeclareEmphSequence{\itshape,\upshape\bfseries,\itshape\bfseries}

Пример.

\documentclass{article}

\DeclareEmphSequence{\itshape,\upshape\bfseries,\itshape\bfseries}

\begin{document}

Hello, \emph{my name \emph{is Enrico.}} And now what?

\emph{Hello, \emph{my name \emph{is Enrico.} And} now} what?

\end{document}

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

Во втором (надуманном) примере вы видите, что атрибуты восстанавливаются один за другим по мере завершения различных вложенных групп.

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