Короткий пример ниже показывает, что \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 году, шрифты характеризуются четырьмя независимыми атрибутами:
- кодирование
- семья
- форма
- ряд
к которому мы могли бы добавить размер. Эти атрибуты независимы друг от друга. Кодировка немного своеобразна, и я не буду с ней разбираться.
Существует несколько предопределенных команд, которые изменяют один атрибут за раз:
\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}
Во втором (надуманном) примере вы видите, что атрибуты восстанавливаются один за другим по мере завершения различных вложенных групп.