venn.tex · 63 lines
\documentclass[tikz,border=14pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[
drink/.style={font=\sffamily\bfseries\fontsize{12}{14}\selectfont, text=black, align=center, inner sep=1pt},
hint/.style ={font=\sffamily\itshape\fontsize{8.5}{10}\selectfont, text=black!55, align=center, inner sep=1pt},
setlab/.style={font=\sffamily\bfseries\fontsize{14}{16}\selectfont, align=center, inner sep=2pt},
]
% ---------------- geometry (tuned so every region can hold its text) -----
\def\R{3.8} % radius of each circle
\def\C{2.736} % distance of each centre from the origin
\path (0,\C) coordinate (cE) % "Has espresso" -- top
(210:\C) coordinate (cM) % "Has milk" -- bottom left
(330:\C) coordinate (cC); % "Served cold" -- bottom right
% ---------------- the rectangle of "all these drinks" --------------------
\node[draw=black!35, line width=0.9pt, rounded corners=8pt, fill=black!1.5,
minimum width=19.4cm, minimum height=14.4cm] at (0,1.0) {};
\node[hint, anchor=north west, text=black!45] at (-9.55,8.05) {the drinks on the menu};
% ---------------- three overlapping circles ------------------------------
\begin{scope}[transparency group]
\fill[orange!75, fill opacity=0.32] (cE) circle (\R);
\fill[blue!55, fill opacity=0.32] (cM) circle (\R);
\fill[cyan!65, fill opacity=0.32] (cC) circle (\R);
\end{scope}
\draw[orange!85!black, line width=1.3pt] (cE) circle (\R);
\draw[blue!65!black, line width=1.3pt] (cM) circle (\R);
\draw[teal!60!black, line width=1.3pt] (cC) circle (\R);
% ---------------- names of the three sets, outside each circle -----------
\node[setlab, text=orange!80!black, anchor=south] at ($(cE)+(90:\R+0.55)$) {Has espresso};
\node[setlab, text=blue!60!black, anchor=25] at ($(cM)+(210:\R+1.05)$) {Has milk};
\node[setlab, text=teal!55!black, anchor=155] at ($(cC)+(330:\R+1.05)$) {Served cold};
% ---------------- the drinks ---------------------------------------------
% espresso only (hot, no milk)
\node[drink] at (0,4.30) {short black};
% milk only (no coffee at all)
\node[drink] at (-3.65,-2.15) {babyccino};
\node[hint] at (-3.65,-3.05) {frothed milk,\\no coffee};
% cold only (cold, but never an espresso shot)
\node[drink] at (3.65,-2.15) {cold brew};
\node[hint] at (3.65,-3.05) {steeped, not\\pulled as espresso};
% espresso + milk, served hot
\node[drink] at (-2.05,1.20) {flat\\white};
% espresso + cold, no milk
\node[drink] at (2.02,1.15) {iced\\long\\black};
% milk + cold, no espresso
\node[drink] at (0,-2.32) {milkshake};
% all three
\node[drink] at (0,0.05) {iced\\latte};
% none of the three: hot filter coffee
\node[drink, anchor=center] at (-7.15,6.55) {pour-over};
\node[hint, anchor=center] at (-7.15,5.30) {filter coffee:\\no espresso, no milk,\\served hot};
\end{tikzpicture}
\end{document}round 1 of 3

Passed on all three of its renders, with a geometry script checking the label positions along the way.
modelqwen/qwen3.8-flashtasktikz-coffee-venn@v1date2026-09-23rounds3 of 8 allowedcost$0.0287thinkingmediumtokens517,312 in, 25,413 out, of which 17,417 reasoningtime8 min 16 s
Compilesdecided by a number, from the filepass
Seven regions, three namesdecided by a number, from the filepass
Every drink in its regiondecided by a number, from the filepass
No label on an edgedecided by a number, from the filepass
run 1 · 7r · $0.0373Every drink in its region and clear of every edge. Round 5 pushed iced long black onto a line and round 6 moved it back.
run 3 · 1r · $0.0440One render, and it passes all four. It measured each label in LaTeX and its clearance from each circle in Python first, and the clock ended it while it was still tuning the layout.same prompt, other modelsall 50 runs on A three-set coffee Venn diagram →
Using LaTeX and TikZ, draw a Venn diagram of three overlapping circles labelled "Has espresso", "Has milk" and "Served cold". Write each of these drinks in the region where it belongs: short black, flat white, iced latte, iced long black, cold brew, babyccino, milkshake, pour-over.Frozen at v1. This model got this and nothing else.
Short black is espresso only, flat white espresso and milk, iced long black espresso and cold, iced latte all three, babyccino milk only, milkshake milk and cold, cold brew cold only, and pour-over outside every circle. The circles and words are read back out of the compiled PDF, each word has to be centred in its own region, and no letter may touch a circle's outline, with the line's width counted. How it is scored, and this run's files on GitHub.