我正在尝试为 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}