改变全球风格

改变全球风格

是否存在一种普遍适用的技术,对于 LaTeX 文档中使用的任何标签/环境,允许在序言中调整该标签/环境实例内容的默认样式?

  • 例如,如果我决定\emph{}文档中所有实例的内容不仅应以斜体显示(常见的默认设置),而且还应以粗体显示,那么我该怎么做?

  • 类似地,如果我决定所有实例的\begin{verbatim}...\end{verbatim}内容不仅应以等宽字体(常见的默认设置)呈现,而且还应以灰色背景呈现,那么我该怎么做?

但更重要的是,除了简单地解释如何处理这两个示例案例之外,您能否概述一下 LaTeX 用户可以遵循的程序?全部以便能够改变任何给定标签/环境的样式。

答案1

让我们只处理第一个例子。LaTeX 声明\emph

\DeclareTextFontCommand{\emph}{\em}

所以我们需要查找一下\em

\DeclareRobustCommand\em{%
  \@nomath\em
  \ifdim \fontdimen\@ne\font >\z@
    \upshape
  \else
    \itshape
  \fi}

第一条指令,\@nomath\em如果在数学模式下发现该命令,则引发错误,否则不执行任何操作。条件检查当前字体是否倾斜(在本例中\fontdimen1\font为正);如果是,则发出\upshape,否则\itshape

因此,如果你想\emph在直立上下文中选择“粗体斜体”,在斜体上下文中选择“直立粗体”,你必须说

\DeclareRobustCommand\em{%
  \@nomath\em
  \ifdim \fontdimen\@ne\font >\z@
    \upshape\bfseries
  \else
    \itshape\bfseries
  \fi}

这是一个通用的方法吗?不是。

我甚至不会考虑在灰色背景上打印逐字材料所需的更改:该fancyvrb包提供了这样的功能,并且它的代码是非常复杂的。

在 LaTeX 中,你不能像 HTML 那样简单地将调用传递给浏览器。这两个模型完全不同。

答案2

正如 egreg 所说,没有通用的方法——每个方法都需要单独考虑。因此,\emph您可以在序言中重新定义命令:

在此处输入图片描述

笔记:

  • 正如 egreg 指出的那样,这需要使用\LetLtxMacro包裹letltxmacro而不是\let因为\emph是用 声明的\DeclareRobustCommand
  • 正如 Caramdir 指出的那样,这可能是也可能不是嵌套使用所需要的\emph{}。此重新定义产生交替的粗体斜体,带有粗体直立,而原始定义产生交替的非粗体斜体,带有非粗体直立,如上所示。

代码:

\documentclass{article}
\usepackage{letltxmacro}

\LetLtxMacro\OldEmph\emph
\renewcommand{\emph}[1]{\textbf{\OldEmph{#1}}}%

\begin{document}
    \OldEmph{orignal emph}\par
    \emph{modified emph}\par
    \emph{modified emph with a \emph{nested emph}}
\end{document}

相关内容