包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}
答案2
我可以确认这个问题,但这不仅存在于x
和y
选项中,还存在于您可以包含的每个第二个选项中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}