如何在环境中包装LaTeX命令?从本质上讲,我又怎么能\ somecommand {}内容为\ {开始} somecommand内容\ {结束} somecommand?我已经尝试过创建一个新环境这样的显而易见的事情:
\newenvironment{somecommand}[0]{
\somecommand{
}
{
}
}
Run Code Online (Sandbox Code Playgroud)
但这会导致花括号出现问题.让我举一个更具体的例子.假设您想要创建非常重要的环境,并且您希望使用命令emph来完成此任务.一个直截了当(但不正确)的解决方案就是写一些东西
\newenvironment{very-important}[0]{
\emph{
}
{
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是该命令使用在环境中找到的信息,因此它不是环境的打开命令之一,也不是环境的关闭命令.问题是:你怎么能这样做?
Wil*_*son 20
这可以使用environ包完成,如下所示:
\usepackage{environ}
...
\NewEnviron{very-important}{\emph{\BODY}}
\BODY包含环境的主体,环境可以嵌套.有关详细信息,请参阅文档.
Ale*_*tov 11
看来我现在可以猜出问题是什么.
\newenvironment{very-important}{\startimportant}{}
\def\startimportant#1\end{\emph{#1}\end}
\begin{very-important}
Something
\end{very-important}
Run Code Online (Sandbox Code Playgroud)
此解决方案效果很好.但恕我直言,将所有文本包装在环境中是个坏主意.为什么?有两种方法可以对文本做些什么.例如,您想要更改字体并使用斜体.
\textit{sentence written in italics}{\it sentence written in italics\/}有什么不同?问题是第一种方法使用第二种方法.
\it宏更改字体,大括号}将其更改回来.
\textit宏读取完整参数,更改字体并再次插入参数:
\textit大致定义如下(不完全).
\def\texit#1{{\it#1\/}}
Run Code Online (Sandbox Code Playgroud)
第一种方法总是做额外的工作.它读了两次论点.几乎总是,你可以做出改变,然后你就可以恢复一切.
最终你为什么要使用这个环境?使用宏.
\veryimportant{
Any thought
}
Run Code Online (Sandbox Code Playgroud)
小智 6
一个更简单的方法可能是:
\newenvironment{somecommand}[0]{
\somecommand\bgroup
}
{
\egroup
}
说明:\bgroup工作方式{和\egroup工作方式类似}。
| 归档时间: |
|
| 查看次数: |
7857 次 |
| 最近记录: |