作为一名教师,我非常感激venndiagram 使用包及其功能。有没有办法用图案而不是纯色来填充集合(以便更好地打印)?类似于\begin{venndiagram2sets}[shade={pattern=horizontal lines}]
或 的东西\begin{venndiagram2sets}[tikzoptions={pattern=horizontal lines}]
?
以下是没有图案填充的工作示例。提前致谢!
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usepackage{venndiagram}
%
\begin{document}
\begin{venndiagram2sets}[shade=orange,tikzoptions={red}]
\fillA
\end{venndiagram2sets}
\end{document}
答案1
我同意 marmot 的评论,即最好的选择是使包更灵活(我的建议是用fill=\@venn@shade
类似 的东西替换every venn region/.try
)。与此同时,这里有一个修复程序,它使用范围向路径添加额外的选项。
\documentclass{article}
%\url{https://tex.stackexchange.com/q/446941/86}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usepackage{venndiagram}
%
\begin{document}
\begin{venndiagram2sets}[shade={},tikzoptions={red}]
\begin{scope}[every path/.append style={pattern=north east lines}]
\fillA
\end{scope}
\end{venndiagram2sets}
\end{document}
很shade={}
重要。它启用填充(因为代码中shade=<colour>
变为fill=<colour>
),但没有指定颜色。这里的重点是every path
检查样式第一的因此,放置shade=<actual colour>
将覆盖模式,而shade=none
放置将禁用模式。仅shade={}
启用模式而不覆盖它。
更新 2018-08-22
由于裁剪的工作方式,处理交叉区域变得有点棘手。以下肯定属于有点黑客,但它似乎确实有效。它会将一些代码附加到clip
命令中,从而删除选项并关闭任何其他选项。我思考这处理了将选项传递到剪切路径时可能出现的所有问题。
我还添加了一个辅助命令,将维恩图命令包装在范围内,以便该技术能够发挥作用。
\documentclass{article}
%\url{https://tex.stackexchange.com/q/446941/86}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usepackage{venndiagram}
%
\newcommand*\wrapscope[1]{%
\expandafter\newcommand\csname o#1\endcsname[1][]{%
\begin{scope}[##1]
\csname #1\endcsname
\end{scope}
}%
}%
\wrapscope{fillA}
\wrapscope{fillACapB}
\makeatletter
\tikzset{
clip/.append code={%
\let\tikz@options=\pgfutil@empty
\tikz@addmode\tikz@mode@fillfalse%
\tikz@addmode\tikz@mode@drawfalse%
\tikz@addmode\tikz@mode@doublefalse%
\tikz@addmode\tikz@mode@boundaryfalse%
\tikz@addmode\tikz@mode@fade@pathfalse%
\tikz@addmode\tikz@mode@fade@scopefalse%
}
}
\makeatother
\begin{document}
\begin{venndiagram2sets}[shade={},tikzoptions={red}]
%\ofillA[every path/.append style={pattern=north east lines}]
\ofillACapB[every path/.append style={pattern=north east lines}]
\end{venndiagram2sets}
\end{document}
答案2
类似这样的(这只是一个粗略的提议):
\documentclass[border=5pt,tikz]{standalone}
\usetikzlibrary{patterns}
%\usepackage{venndiagram}
%
\begin{document}
%\begin{venndiagram2sets}[shade=orange,tikzoptions={red}]
% \fillA
%\end{venndiagram2sets}
\begin{tikzpicture}[red,every node/.style={font=\Large}]
\draw[pattern=north west lines] (0,0) circle(1.5);
\draw (2,0) circle(1.5);
\node[fill=white,inner sep=1pt,rounded corners,below=3] at (90:1.5) {$A$};
\node[xshift=2cm,below=3] at (90:1.5) {$B$};
\end{tikzpicture}
\end{document}
输出:
编辑:以下是带有水平线的提案(手工绘制的图案——只是为了好玩):
\documentclass[border=5pt,tikz]{standalone}
\usetikzlibrary{patterns}
%\usepackage{venndiagram}
%
\begin{document}
%\begin{venndiagram2sets}[shade=orange,tikzoptions={red}]
% \fillA
%\end{venndiagram2sets}
\begin{tikzpicture}[red,every node/.style={font=\Large}]
\begin{scope}
\clip (0,0) circle(1.5);
\foreach \x in {-5,-4.95,...,6}
{
\draw[black,yshift=\x cm] (-5,\x) -- (5,\x);
}
\end{scope}
\draw (2,0) circle(1.5);
\draw (0,0) circle(1.5);
\node[fill=white,inner sep=1pt,rounded corners,below=3] at (90:1.5) {$A$};
\node[xshift=2cm,below=3] at (90:1.5) {$B$};
\end{tikzpicture}
\end{document}
输出如下: