当我在中使用指定 的\CircleText
宏时,会应用于。有没有办法重置样式,以便不会继承样式。下面的 MWE 产生:\node
text width=
text width=
\CircleText
\CircleText
text width=
我认为,如果在选项开始时\CircleText
,我可以以某种方式重置全部样式恢复为默认设置,这样就可以正常工作。
笔记:
- 一个解决方案是将设置
text width=
为适当的值,\CircleText
但这样做只是将这个问题推迟到出现我不想继承的其他样式为止。 - 另一个解决方案是为每个数字创建框,然后
\usebox
按照建议使用正确嵌套 tikzpicture 环境:将所有 PGF 值重置为其默认值。 - 评论中指出,这是一个嵌套的情况
tikxpicture
,不是正式不支持,随时可能中断。可以使用以下解决方案轻松解决此问题:是否有一种(简单的)方法可以查明某个命令是否在 tikzpicture 环境中执行?\node
。然而,这需要在 a 中使用 a ,\node
而这甚至无法编译。
代码:
\documentclass{article}
\usepackage{tikz}
%% https://tex.stackexchange.com/questions/15334/getting-numbers-to-appear-in-circles
\newcommand*{\CircledText}[2][fill=red!40]{%
\tikz[baseline=(char.base)]{%
\node[
shape=circle,
draw=black, thick,
fill opacity=0.3,
text opacity=1,
inner sep=0.8pt,
outer sep=0pt,
#1
] (char) {#2};}%
}%
\newcommand*{\DesiredText}{\CircledText{3} Some text}
\begin{document}
Outside of tikzpicture: \DesiredText
\bigskip
Inside of tikzpicture \emph{without} ``text width='' specified):
\begin{tikzpicture}
\node at (4,0) {\DesiredText};
\end{tikzpicture}
\bigskip
Inside of tikzpicture \emph{with} ``text width='' specified):
\begin{tikzpicture}
\node [text width=5.0cm] at (4,0) {\DesiredText};
\end{tikzpicture}
\end{document}
答案1
您可以保护想要保留的参数:
\documentclass{article}
\usepackage{tikz}
\newbox\mybox
%% https://tex.stackexchange.com/questions/15334/getting-numbers-to-appear-in-circles
\newcommand*{\CircledText}[2][fill=red!40]{%
\setbox\mybox=\hbox{#2}
\tikz[baseline=(char.base)]{%
\node[
shape=circle,
draw=black, thick,
fill opacity=0.3,
text opacity=1,
inner sep=0.8pt,
outer sep=0pt,
#1,text width=\wd\mybox
] (char) {#2};}%
}%
\newcommand*{\DesiredText}{\CircledText{3} Some text}
\begin{document}
Outside of tikzpicture: \DesiredText
\bigskip
Inside of tikzpicture \emph{without} ``text width='' specified):
\begin{tikzpicture}
\node at (4,0) {\DesiredText};
\end{tikzpicture}
\bigskip
Inside of tikzpicture \emph{with} ``text width='' specified):
\begin{tikzpicture}
\node [text width=5.0cm] at (4,0) {\DesiredText};
\end{tikzpicture}
\end{document}