为新命令添加边距

为新命令添加边距

我有一个如下定义的命令:

\newcommand{\lol}[1]{\vspace{4pt}\color{subheadings}\raggedright\scshape\fontspec[Path = fonts/lato/]{Lato-Reg}\fontsize{9pt}{11pt}\selectfont {#1 \\} \normalfont }

我想为该命令添加边距,但找不到正确的方法。

目前我正在使用屏幕扩展像这样的包装:

\begin{addmargin}[2em]{0em}
\lol{MY TEXT HERE}
\end{addmargin}

但每次使用时添加环境很麻烦哈哈命令。

有没有办法在 newcommand 定义中添加 addmargin 环境?

谢谢

答案1

它会是这样的

\setlength{\leftskip}{2em}

或者可能

\addtolength{\leftskip}{2em}

如果您想在已经缩进的环境中增加缩进。但操作内部变量\leftskip可能比较棘手,因为可能会与 LaTeX 的环境发生不必要的交互。

问题是,您何时重置边距?环境的优点是它何时结束是清楚的,而且,像上面这样的定义会在环境结束时自动撤消。您的命令没有这样做。因此,您需要另一个命令来重置边距。

另一个问题是,如果您在段落中间执行此操作,它将适用于整个段落。

答案2

如果你想获得

\begin{addmargin}[2em]{0em}
\lol{MY TEXT HERE}
\end{addmargin}

最简单的方法是修改现有的定义以\lol包含封闭环境的\begin\end。因此,您可以将定义¹重写为:

\NewDocumentCommand{\lol}{m}{
  \begin{addmargin}[2em]{0em}
    \vspace{4pt}\color{subheadings}\raggedright\scshape\fontspec[Path = fonts/lato/]{Lato-Reg}\fontsize{9pt}{11pt}\selectfont {#1 \\} \normalfont 
  \end{addmargin}
}

  1. 让我们都养成使用\NewDocumentCommand代替 的习惯\newcommand,好吗?

答案3

首先,您的定义存在一些薄弱之处\lol

  1. 该命令应该首先执行\par
  2. \color语句应出现在组内;
  3. 同样地,对于\raggedright需要 \par结束其效果;
  4. \fontspec不鼓励在文档中使用,因为这样效率很低。

现在,除非您需要参数中的列表或基于列表的环境\lol,否则您不需要addmargin,但这不是问题,它将提供第 2 点和第 3 点提到的必要分组。

在下面的例子中,我将 Lato 改为 Fira Sans,因为标准发行版中的 Lato 字体没有小写字母。此外,\lipsum它仅用于生成无意义的文本。我为颜色添加了定义,当然,请使用您自己的颜色。

\documentclass{article}
\usepackage{scrextend}
\usepackage{fontspec}
\usepackage{xcolor}

\usepackage{lipsum}% for text

\colorlet{subheadings}{green!30!blue}

\newfontfamily{\latofont}{Fira Sans} % my Lato font has no small caps

\newcommand{\lol}[1]{%
  \par
  \addvspace{4pt}%
  \begin{addmargin}[2em]{0pt}
  \color{subheadings}%
  \fontsize{9}{11}\scshape\latofont\raggedright
  #1\par
  \end{addmargin}
  \addvspace{4pt}
}

\begin{document}

\lipsum[3][1-4]

\lol{\lipsum[1][1-4]}

\lipsum[3][1-4]

\end{document}

在此处输入图片描述

相关内容