据称,\emph
更“语义化”,而\textit
可以看作是其实现的一个方面。LaTeX 没有\strong
--- ,而 HTML 则同时具有<em>
和<strong>
。那么我应该自己动手\strong
还是有点矫枉过正?或者还有其他等效的命令?
答案1
其背后的想法\emph
是,它提供了一种强调文本某一部分的高级方法。高级的意思是它“独立于”实际的实现。
的默认行为\emph
是在直立上下文中使用斜体,在斜体上下文中使用直立,但这可以根据文档进行修改(或通过实现特定样式的包进行修改)。特别是,你的问题没有真正的答案:\emph
和\textit
没有“抽象”关系;这种关系只存在于默认实现级别。
这与声明文本的某些部分为斜体不同;例如,定理通常以斜体排版,样式\itshape
为此使用 ,而不是\em
( 的声明形式\emph
)。同样,它们用于\bfseries
定理标签(或\scshape
或任何其他)。
你可以随意定义任意数量的类似命令。如果你的风格需要某种“强烈强调”,那么能\strong
随意定义,也许\bfseries
在正常上下文中使用,并\extrabfseries
在上下文中使用(如果您的字体支持,则名称是假设的)\strong
。在这样做之前,请深思熟虑您的读者是否能够理解\emph{word}
和之间的区别\strong{word}
(我认为他们不会)。
答案2
关于如何定义\emph
和,可能存在一些混淆。从 latex 内核(参见):\em
latex.ltx
\DeclareTextFontCommand{\emph}{\em}
\DeclareRobustCommand\em
{\@nomath\em \ifdim \fontdimen\@ne\font >\z@
\eminnershape \else \itshape \fi}%
\def\eminnershape{\upshape}%
基本上,\emph
(via \em
)检查它是否已经处于“强调模式”。如果不是,\itshape
则执行;如果是,则执行\eminnnershape
——默认情况下设置为——。(可以通过指令进行修改。例如,运行将选择小型大写字母作为“内部”强调材料。)\upshape
\eminnershape
\renewcommand
\renewcommand\eminnershape{\scshape}}
因此,情况并非\emph
只是比“更具语义” \textit
。事实上,\emph
是更具语义——它允许您选择印刷强调的方法(默认\itshape
为“外部”和\upshape
“内部”材料)——但它还提供了一种提供强调的方法在强调材料内。
最后,如果你想知道\DeclareTextFontCommand
在 LaTeX 内核中是如何定义的,请看下面:
\def \DeclareTextFontCommand #1#2{%
\DeclareRobustCommand#1[1]{%
\ifmmode
\nfss@text{#2##1}%
\else
\hmode@bgroup
\text@command{##1}%
#2\check@icl ##1\check@icr
\expandafter
\egroup
\fi
}%
}