环境定义错误

环境定义错误

我正在尝试为 tikz 图像创建自己的包装器,但输出并不像预期的那样。以下是代码

\documentclass{article}

\usepackage{tikz,lipsum, wrapfig}

\newenvironment{wraptikz}[4]{
    \begin{wrapfigure}{#1}{#2cm}
        \vspace{-#3pt}
        \begin{tikzpicture}{scale=#4}
}{
        \end{tikzpicture}
    \end{wrapfigure}
}

\begin{document}
    \begin{wraptikz}[r]{5}{20}{1}
        \draw (0, 0) -- (5, 5);
    \end{wraptikz}
    \lipsum[1]
\end{document}

输出结果如下:

在此处输入图片描述

期望的输出是:

在此处输入图片描述

答案1

您正在wraptikz使用四个强制参数进行定义,但使用可选参数的语法。

此外,\begin{wrapfigure}不应使用,而应使用\wrapfloat{figure}(见在 wrapfigure 和 figure 环境之间切换)。

这里有一个保留了 标准语法的实现wrapfigure,并添加了垂直退格键的尾随强制参数(但是,我不确定它是做什么用的),最后一个参数具有可选参数的语法,因此您可以根据tikzfigure需要传递任意多个选项,而不仅仅是scale

\documentclass{article}

\usepackage{tikz,wrapfig,xparse,lipsum}

\NewDocumentEnvironment{wraptikz}{omO{0pt}mmO{}}{%
  \IfNoValueTF{#1}
    {\wrapfloat{figure}{#2}[#3]{#4}}
    {\wrapfloat{figure}[#1]{#2}[#3]{#4}}
  \vspace{-#5pt}
  \begin{tikzpicture}[#6]
}{%
  \end{tikzpicture}
  \endwrapfloat
}

\begin{document}

\begin{wraptikz}{r}{5cm}{0}[scale=1]
  \draw (0, 0) -- (5, 5);
\end{wraptikz}

\lipsum[1]

\end{document}

在此处输入图片描述

答案2

的第一个参数wrapfigure需要大括号{},所以必须是{#1},在新的环境中也是如此。所以它变成了\begin{wraptikz}{r}{5}{20}{2}

方括号[]是为可选参数保留的,但您不会加载任何参数。如果您需要可选参数,请将环境定义更改为

\newenvironment{wraptikz}[4][*]{%
    \begin{wrapfigure}{#1}{#2cm}

但是,您必须输入默认值,而不是星号。例如,将第一个参数[r]设为r默认值。在这种情况下,您可以在文档中输入新环境时使用方括号。请注意,wrapfigure在环境定义中仍使用括号。

顺便说一下,wrapfigure需要这个wrapfig包。

输出

在此处输入图片描述

代码

\documentclass{article}
\usepackage{wrapfig}
\usepackage{tikz}
\usepackage{lipsum}

\newenvironment{wraptikz}[4]{%
    \begin{wrapfigure}{#1}{#2cm}
        \vspace{-#3pt}
        \begin{tikzpicture}[scale=#4]
}{%
        \end{tikzpicture}
    \end{wrapfigure}
}

\begin{document}
\begin{wraptikz}{r}{5}{20}{2}
        \draw (0, 0) -- (5, 0);
\end{wraptikz}
    \lipsum[1]
\end{document}

相关内容