我有一个如下定义的命令:
\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}
}
- 让我们都养成使用
\NewDocumentCommand
代替 的习惯\newcommand
,好吗?
答案3
首先,您的定义存在一些薄弱之处\lol
:
- 该命令应该首先执行
\par
; - 该
\color
语句应出现在组内; - 同样地,对于
\raggedright
你需要\par
结束其效果; \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}