我曾经定义过一个自定义的 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
\NewEnviron
在environ
包的帮助下
\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
代码的一些改进之处。
- 使用
tikzset
而不是tikzstyle
。 ysep
当您已经拥有时无需指定inner sep
。- 无需
minipage
在节点内使用。您可以text width= 0.85\textwidth, minimum width = 0.85\textwidth
在node
选项中指定,使其更加tikz
方便。 - 如果您想避免多余的垂直空间,
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
,你就会得到