tcolorbox:TikZ 图片选项“tikz lower”?

tcolorbox:TikZ 图片选项“tikz lower”?

tcolorbox中定义了一种名为“tikz lower”的样式。包手册对其介绍如下:

/tcb/tikz 下部=选项

此样式在下半部分的开始和结束处添加了一个居中的 tikzpicture 环境。选项可以作为 TikZ 图片选项给出。

但是,我不太明白“TikZ 图片选项”是什么意思。下面是我尝试更改两个轴的比例(通常我会这样做\begin{tikzpicture}[x=10pt,y=20pt]):

\documentclass{article}
\usepackage{tcolorbox}
  \tcbuselibrary{listings,skins}
\usepackage{tikz}

\newtcblisting{displaytikz}{
    tikz lower,
    % tikz lower={x=10pt,y=20pt},
    listing side text,
    bicolor,colback=blue!30!white,colbacklower=white,
    colframe=black,righthand width=3cm
}

\begin{document}

\begin{displaytikz}
\draw (0,0) -- (1,1);
\draw (0,0.5) -- (2,0);
\end{displaytikz}

\end{document}

我用注释的第二行替换定义中的第一行\newtcblisting,然后出现错误:

软件包 pgfkeys 错误:我不知道您传递了“20pt]”的密钥“/tcb/y”,我将忽略它。也许您拼错了。\begin{displaytikz}

仅供参考,我还检查了tcolorbox.sty,相关行是:

...
tikz lower/.style={
    before lower=\centering\tcb@shield@externalize\begin{tikzpicture}[#1],
    after lower=\end{tikzpicture}
}, ...

我想我一定是搞错了什么。如果tikz lower不是这样,那么我该如何将参数传递给 TikZ 环境?有什么想法吗?

答案1

感谢@ThomasF.Sturm(tcolorbox 包的开发者)和@Ignasi(上面的回答者,报告了这个问题),这里是一个通过的 ME:

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{listings,skins,xparse}
\usepackage{tikz}

% Patch start
\makeatletter
\tcbset{
  tikz upper/.style={before upper=\centering\tcb@shield@externalize\begin{tikzpicture}[{#1}],after upper=\end{tikzpicture}},%
  tikz lower/.style={before lower=\centering\tcb@shield@externalize\begin{tikzpicture}[{#1}],after lower=\end{tikzpicture}},%
}
\makeatother

\NewTCBListing{displaytikz}{ O{} }{
    tikz lower={#1},
    listing side text,
    bicolor,colback=blue!30!white,colbacklower=white,
    colframe=black,righthand width=3cm
}

\begin{document}

\begin{displaytikz}
\draw (0,0) -- (1,1);
\draw (0,0.5) -- (2,0);
\end{displaytikz}

\begin{displaytikz}[x=10pt, y=20pt, red, line width=2pt]
\draw (0,0) -- (1,1);
\draw (0,0.5) -- (2,0);
\end{displaytikz}

\end{document}

enter image description here

答案2

我可以确认这个问题,但这不仅存在于xy选项中,还存在于您可以包含的每个第二个选项中tikz lower。我不知道如何解决它。

作为一种解决方法,您可以定义一种TikZ样式并将其用作选项tikz lower

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{listings,skins}
\usepackage{tikz}

\tikzset{
    mystyle/.style={x=10pt, y=20pt, red, line width=2pt}}

\newtcblisting{displaytikz}{
    tikz lower={mystyle},
    listing side text,
    bicolor,colback=blue!30!white,colbacklower=white,
    colframe=black,righthand width=3cm
}

\begin{document}

\begin{displaytikz}
\draw (0,0) -- (1,1);
\draw (0,0.5) -- (2,0);
\end{displaytikz}

\end{document}

enter image description here

相关内容