可在其他宏中使用的无参数宏

可在其他宏中使用的无参数宏

我需要参数文本格式化程序,以便在某些使用宏来重新定义属性的环境中使用(例如enumitem)。

我需要给文本加下划线,但没有等效的无参数宏(你如何称呼这些类型的宏?它们在某些情况下似乎很重要,但我无法轻易找到有关它们的信息)可以做到这一点。

http://en.wikibooks.org/wiki/LaTeX/Fonts#Font_styles

我可以\bfseries在我的宏中使用:例如,\setlist[1]{style=standard,label=\\,before=\huge\color{black}\bfseries}这里\textbf不起作用,因为它需要一个参数。

我需要一个与\underlineand/or等效的函数\emph,例如

\setlist[1]{style=standard,label=\\,before=\huge\color{black}\ulseries}

所有 4a___ 都应加下划线(第 3 级)

\documentclass[11pt]{article} % use larger type; default would be 10pt
\usepackage[margin=0.4in]{geometry}
\usepackage{booktabs}
\usepackage{enumitem,color}
%\usepackage[normalem]{ulem}

%\useunder{\uline}{\ulined}{}

\setlist[1]{style=standard,label=\\,before=\huge\color{black}\bfseries}
\setlist[2]{style=standard,label=\\,before=\large\color{black}\bfseries}
\setlist[3]{style=standard,label=\\,before=\normalsize\color{black}\mdseries\slshape}
\setlist[4]{style=standard,before=\small\color{black}\mdseries\normalfont\itshape}

\begin{document}


\begin{itemize}
    \item item Root) \hfill
    \begin{itemize}
    \item item2
    \item item3
    \item item4
        \begin{itemize}
        \item item 4a
            \begin{itemize}
                \item 4ai
                \item 4aii
            \end{itemize}
        \item item 4b
            \begin{itemize}
                \item 4bi
            \end{itemize}
        \end{itemize}
        \item item 5   
    \end{itemize}
    \clearpage\huge\item Noon \hfill \\
\end{itemize}

\end{document} 

答案1

字体开关,例如\itshape\mdseries\scshape告诉 LaTeX 切换到不同的字体。LaTeX 切换到的字体取决于当前活动的字体系列,并且与不同属性(粗细、形状等)相对应的各种字体通常在字体定义文件中定义。

稍微简化一下现实,当你说\itshape这大致就是发生的事情:LaTeX 寻找从 {当前系列 + 当前系列 + 当前大小 + 斜体形状} 到字体的映射。如果找到此映射,它会切换到使用该字体进行排版。

大小切换也是如此,但\large在这种情况下,LaTeX 可能会根据需要按适当的倍数缩放字体。同样,切换会导致 LaTeX 切换到使用适当的字体进行排版。

如果您的字体系列包含下划线字体,那么您可以扩展此系统以提供类似的下划线开关。但是,大多数字体系列不提供这样的字体。相反,下划线是作为排版的一部分添加到现有字符上的。因此,您获得的字体保持不变。唯一改变的是,在适当的位置也绘制了一条线。

但是排版并在其下画线与简单地用不同字体排版有很大不同。因此,无法扩展字体切换命令来涵盖这种情况,因为您实际上根本没有切换字体。而是继续使用当前字体并在其下画线。

因此,除非当前字体系列中提供预下划线字体,并且定义了 LaTeX 字体处理功能的适当扩展,否则,这两种情况是不相似的,并且下划线不能像切换到其他字体那样得到支持。

我不知道有任何现成的字体系列提供预下划线字体。因此,为了演示如何扩展 LaTeX 的字体处理,我将使用 Latin Modern 的非标准直立斜体。

默认情况下,没有高级方法来访问此字体。要使用它,您需要使用较低级别的字体切换命令并确保适当的映射。但是,如果您使用包,则可以访问形状cfr-lm。这为 Latin Modern 提供了一组扩展的字体定义文件。此外,它还加载了nfssext-cfr类似于标准 LaTeX 字体开关的命令。例如,以与在标准 LaTeX 中启用常规斜体形状\uishape大致相同的方式启用直立斜体形状。\itshape

那么你可以对于第三级条目,使用直立斜体,这比常规斜体更容易与斜体区分开来。

例如:

\documentclass{article}
\usepackage{enumitem,color}
\usepackage[rm=lining,sf=lining,tt=lining]{cfr-lm}

% Note that style=standard has no effect: in a description, it is default; in an itemize or enumerate, it doesn't apply
\setlist[itemize]{before=\color{black}}
\setlist*[1,2,3,itemize]{label={}}
\setlist*[1,2,itemize]{before*=\bfseries}
\setlist*[1,itemize]{before*=\huge}
\setlist*[2,itemize]{before*=\large}
\setlist*[3,itemize]{before*=\normalsize\mdseries\uishape}
\setlist*[4,itemize]{before*=\small\normalfont\slshape}

\begin{document}
  \begin{itemize}
    \item item Root)
    \begin{itemize}
      \item item2
      \item item3
      \item item4
      \begin{itemize}
        \item item 4a
        \begin{itemize}
          \item 4ai
          \item 4aii
        \end{itemize}
        \item item 4b
        \begin{itemize}
          \item 4bi
        \end{itemize}
      \end{itemize}
      \item item 5
    \end{itemize}
    \item Noon
  \end{itemize}
\end{document}

形状切换

相关内容