如何使用 \newenvironment 重写该命令?

如何使用 \newenvironment 重写该命令?

我曾经定义过一个自定义的 latex 命令,效果很好。现在我想用 \newenvironment 命令将其转换为 latex 环境。但是我试了好几种方法都失败了。你能帮我吗?

我自己的 latex 命令的定义是

\newcommand{\smallbox}[1]{
    \tikzstyle{mybox} = [draw=red, rectangle,inner sep=5pt, inner ysep=5pt]
    \begin{center}
        \begin{tikzpicture}
            \node [mybox] (box){
                \begin{minipage}{0.85\textwidth}
                     #1
                \end{minipage}
            };
       \end{tikzpicture}
    \end{center}
}

我们暂时把这个待定义的环境称为“小环境”。

我希望以下命令

\smallbox{This is a small box!}

相当于

\begin{smallenvironment}
    This is a small box!
\end{smallenvironment}

谢谢!

答案1

\NewEnvironenviron包的帮助下

\documentclass{article}

\usepackage{tikz}
\usepackage{environ}

\NewEnviron{smallenvironment}{%
    \tikzstyle{mybox} = [draw=red, rectangle,inner sep=5pt, inner ysep=5pt]%
    \begin{center}%
        \begin{tikzpicture}%
            \node [mybox] (box){%
                \begin{minipage}{0.85\textwidth}%
                     \BODY
                \end{minipage}%
            };%
       \end{tikzpicture}%
    \end{center}%
}

\begin{document}

\begin{smallenvironment}
This is a small box!
\end{smallenvironment}

\end{document} 

在此处输入图片描述

另一种方式,正如 egreg 在他的评论中指出的那样,是保留你的定义\smallbox并简单地说

\NewEnviron{smallenvironment}{\smallbox{\BODY}}

编辑

请注意,借助该mdframed包可以以更简单的方式获得上述环境。

看看以下 MWE

\documentclass{article}

\usepackage{tikz}
\usepackage{environ}
\usepackage{mdframed}

\newcommand{\smallbox}[1]{
    \tikzstyle{mybox} = [draw=red, rectangle,inner sep=5pt, inner ysep=5pt]
    \begin{center}
        \begin{tikzpicture}
            \node [mybox] (box){
                \begin{minipage}{0.85\textwidth}
                     #1
                \end{minipage}
            };
       \end{tikzpicture}
    \end{center}
}

\NewEnviron{smallenvironment}{\smallbox{\BODY}}

\newmdenv[%
    linecolor=red,
    innerleftmargin=5pt,
    innerrightmargin=5pt,
    leftmargin=20pt,
    rightmargin=20pt
  ]{smallmdframe}

\begin{document}

\begin{smallenvironment}
This is a small box!
\end{smallenvironment}

\begin{smallmdframe}
This is a small box!
\end{smallmdframe}

\end{document} 

并在其输出

在此处输入图片描述

答案2

Karl 已经向您展示了如何使用 来形成新环境environ。我将指出您的tikzpicture代码的一些改进之处。

  1. 使用tikzset而不是tikzstyle
  2. ysep当您已经拥有时无需指定inner sep
  3. 无需minipage在节点内使用。您可以text width= 0.85\textwidth, minimum width = 0.85\textwidthnode选项中指定,使其更加tikz方便。
  4. 如果您想避免多余的垂直空间,begin{center}\end{center}可以使用和。\centering

代码:

\documentclass{article}

\usepackage{tikz}
\usepackage{environ}

\NewEnviron{smallenvironment}{%
    \tikzset{mybox/.style = {draw=red, rectangle,inner sep=5pt}}%
    \begin{center}%     %% \centering         
        \begin{tikzpicture}%
            \node [mybox,text width= 0.85\textwidth, minimum width = 0.85\textwidth] (box){%
               \BODY
            };%
       \end{tikzpicture}%
       \end{center}    %% \par %% if you use \centering
}

\begin{document}
Some text

\begin{smallenvironment}
This is a small box!
\end{smallenvironment}

Some text
\end{document}

在此处输入图片描述

有了\centering,你就会得到

在此处输入图片描述

相关内容