有没有类似于 \itshape 但用于 \emph 文本的东西?

有没有类似于 \itshape 但用于 \emph 文本的东西?

编辑:这个问题是错误的,所选的答案回答了完全不同的问题。

\emph为某些符号(例如标点符号)生成略微更好的斜体文本。现在,我用\itshape它来强制文本块使用某种样式。

\lstdefinelanguage{Scheme}{
  % basewidth=0.5em,
  sensitive=true,
  basicstyle=\normalsize\rmfamily,
  commentstyle=\itshape\rmfamily\color[rgb]{.9, .5,.1},
  keywordstyle=\bfseries\sffamily\color[rgb]{0,.3,.7},
  morecomment=[l]{;},
  frameshape={RYR}{Y}{Y}{RYR},
  identifierstyle=\emph\rmfamily,
  keywords={define, lambda, let, cond, else},
  escapeinside={(*;}{;*)},
  columns=fullflexible
}

问题是我想\emph在列表中使用“评论”,而不仅仅是\itshape。有没有类似的东西我可以使用(因为我不想在每个我想使用的实例上转义和取消转义\emph)?

编辑:这似乎\em就是我要找的,但我的问题比这更复杂。问题是identifierstyle使用上面的列表不会将问号斜体化。请参阅下面的图片和代码列表。

\documentclass{article}
\usepackage{tcolorbox}

\tcbuselibrary{listings, skins, breakable}
\definecolor{myorange}{rgb}{0.9, 0.5, 0.1}
\lstdefinelanguage{Scheme}{
  % basewidth=0.5em,
  sensitive=true,
  basicstyle=\normalsize\rmfamily,
  commentstyle=\itshape\rmfamily\color[rgb]{.9, .5,.1},
  keywordstyle=\bfseries\sffamily\color[rgb]{0,.3,.7},
  morecomment=[l]{;},
  frameshape={RYR}{Y}{Y}{RYR},
  identifierstyle=\em\rmfamily,
  keywords={define, lambda, let, cond, else},
  escapeinside={(*;}{;*)},
  columns=fullflexible
}
\begin{document}
\begin{lstlisting}[language=Scheme]
;; rember(*;\textcolor{myorange}{\textrm{:}};*) (*;\textcolor{myorange}{\textsf{Atom}};*) (*;\textcolor{myorange}{\textsf{[ListOf Atom]}};*) (*;\textcolor{myorange}{$\to$};*) (*;\textcolor{myorange}{\textsf{Atom}};*)
;;   Comment here...
(define rember
  ((*;$\lambda$;*) (a lat)
    (cond
      [(null? lat) (quote ())]
      [else (cond
              [(eqv? (car lat) a) (cdr lat)]
              [else (rember a (cdr lat))])])))
\end{lstlisting}
\end{document}

在此处输入图片描述

答案1

列表将以斜体打印标识符,但?不是标识符的一部分。

您可以通过将其变为普通字母来强制列表以斜体打印:

\documentclass{article}
\usepackage{tcolorbox}

\tcbuselibrary{listings, skins, breakable}
\definecolor{myorange}{rgb}{0.9, 0.5, 0.1}
\lstdefinelanguage{Scheme}{
   basewidth=0.5em,
  sensitive=true,
  basicstyle=\normalsize\rmfamily,
  commentstyle=\itshape\rmfamily\color[rgb]{.9, .5,.1},
  keywordstyle=\bfseries\sffamily\color[rgb]{0,.3,.7},
  morecomment=[l]{;},
  frameshape={RYR}{Y}{Y}{RYR},
  identifierstyle=\itshape\rmfamily,
  alsoletter={?},
  keywords={define, lambda, let, cond, else},
  escapeinside={(*;}{;*)},
  columns=fullflexible
}
\begin{document}


\begin{lstlisting}[language=Scheme]
;; rember(*;\textcolor{myorange}{\textrm{:}};*) (*;\textcolor{myorange}{\textsf{Atom}};*) (*;\textcolor{myorange}{\textsf{[ListOf Atom]}};*) (*;\textcolor{myorange}{$\to$};*) (*;\textcolor{myorange}{\textsf{Atom}};*)
;;   Comment here...
(define rember
  ((*;$\lambda$;*) (a lat)
    (cond
      [(null? lat) (quote ())]
      [else (cond
              [(eqv? (car lat) a) (cdr lat)]
              [else (rember a (cdr lat))])])))
\end{lstlisting}

\itshape null?

\end{document}

在此处输入图片描述

答案2

除非您重新定义\emph{},否则默认情况下它会在\em内部使用,即\itshape在内部使用,因此两个命令都应产生完全相同的斜体:

\emph定义:

\ifmmode \nfss@text {\em#1}\else \hmode@bgroup \text@command {#1}\em \check@icl #1\check@icr \expandafter \egroup \fi

\em定义:

\@nomath \em \ifx \emfontdeclare@clist \@empty \ifdim \fontdimen \@ne \font >\z@ \eminnershape \else \itshape \fi \else \edef \em@currfont {\csname \curr@fontshape /\f@size \endcsname }\expandafter \do@emfont@update \emfontdeclare@clist \do@emfont@update \fi

主要区别在于,\emph(例如\textit)会纠正斜体后的空格,而\itshape\em会进行所谓的“斜体校正”。也就是说,\emph{l}l\textit{l}l会在两个字母之间留出一些额外的空格,而 {\em l}l{\itshape l}l则太近了,因此{\em l\/}l{\itshape l\/}l可以避免这种情况。

嗯,另一个重要的区别是,\emph\em表示“强调”,而不是“斜体”,因此{\em l{\em l}l}会产生

姆韦

{\itshape l{\itshape l}l}只会产生斜体,因为它有意义地强调用斜体表示的文本,但不会再次将其斜体化。

因此, 仅当您要使用一些非斜体(例如,粗体或倾斜字体)进行强调或在嵌套强调中返回主字体时,重新定义\emph或更好是可以的,但您应该避免重新定义或,因为这样命令的含义会产生误导,并且会在使用这些命令的任何包中产生意外结果。\em\textit\itshape

正如 Mico 在评论中警告的那样,还有一个区别是数学模式,事实上您已经可以怀疑试图破译上述神秘的定义,所以您可以输入$\emph{x}$or $\textit{x}$,但不能输入${\em x}$nor ${\itshape x}}$

答案3

对应的开关\emph\em

因此,\itshape您可以使用\em

相关内容