65

I would like to draw an image like the following.

enter image description here

This is what I've done so far (I used tikz, but any other package is welcome):

\documentclass{article}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}
        \draw[fill=blue] (.5,0) rectangle (4,2);
        \draw[fill=red] (1,1) to[bend left=50] (3,1) to[bend left=50] (1,1);
        \draw[fill=red] (3,1) -- (3.5,1.5) -- (3.3,1) -- (3.5,.5) -- cycle;
        \draw[fill=white] (1.6,1.1) circle (.15cm); 
        \draw[fill=blue] (1.55,1.1) circle (.05cm);         
    \end{tikzpicture}
\end{document}

enter image description here

Edit: April 2nd, Time for explanation

In Italy (but I also think in other countries), a practical joke done on April 1st is called "pesce d'Aprile" (= April's fish, that is an April Fools' Day prank) and is often related to fishes.

The usual one is to stick a drawing of a fish on someone's back without he/she realizes it.

Some years ago a colleague of mine stuck some "pesci d'Aprile" with written below "sono disponibile" (= I'm easy) on the rear of all the cars in our company car parking. Some other colleagues didn't realize it, and they had gone around with that drawing for days.

Another funny example happened in Milan on April, 1st 1985. Someone put on the windshield of a lot of cars a false fine for illegal parking. On the fine sheet was written "per il pagamento rivolgersi agli uffici comunali di via Gadio, 2" (= for payment, please contact the municipal offices in via Gadio, 2), the address of the Civic Aquarium.

Hence, this question was simply a way to put

enter image description here

P.S. = Since I earned a lot of reputation points with this trick question, I decided to give them back to the Community awarding a bounty to the two answers posted on April, 1st.

Moreover, I accepted Robert's one since he guessed without spoiling, and I thank the other two answerers.

To the downvoters: you're probably technically right, but:

  • there's already too much sadness in the world, let's laugh now and then!
  • humor is part of the LaTeX philosophy, Prof. Knuth himself docet
  • if only serious questions are accepted, why did they create a fun tag?
CarLaTeX
  • 62,716
  • 2
    Maybe you should switch to an ellipse for the body (more similar to the upper picture, perhaps also for the tail: two overlapping ellipses) and you could have a look at decorationswith its snake style for the wavy lines. The mouth could be a bended draw as you use it already. And I think the eye looks fine. – TeXnician Apr 01 '17 at 06:20
  • You did it??!!! – hpekristiansen Apr 01 '17 at 07:03
  • Can you assure me the reason is not religious in any way? – cfr Apr 01 '17 at 23:42
  • 1
    I'm just suspicious of fish. Usually, mysterious fish turn out to be religiously motivated. But perhaps I've just been unlucky. Sleep well. – cfr Apr 02 '17 at 02:08
  • 1
    @CarLaTeX, I surely couldn't know who was the user asking this question before scrolling down. But I already knew he/she was from Italy! :D – Enlico Apr 04 '17 at 19:34
  • @EnricoMariaDeAngelis Ma certamente! Comunque anche in Francia dicono pesce d'aprile! – CarLaTeX Apr 04 '17 at 19:36
  • By the way, I can think of one serious thing only (I hope someone takes it as a suggestion for their asnwers): ... if I only knew how to intentionally set rivers and "holes" in paragraphs, I could have used shapepar and the +100 bounty would have been mine! But this is clearly not the case... XD – Enlico Apr 04 '17 at 19:39
  • 1
    @EnricoMariaDeAngelis You can learn it in the future and win the 200 points bounty! :):):):) – CarLaTeX Apr 04 '17 at 19:43
  • 1
    @EnricoMariaDeAngelis see Paulo's answer! – CarLaTeX Apr 05 '17 at 13:24

10 Answers10

58

enter image description here

Asymptote version:

// fish.asy
//
settings.outformat="pdf";
real w=600,h=400; size(h,w);
pen bgPen=rgb(0,0.647,1),
bodyPen=rgb(0.847,0.196,0.133),
whitePen=rgb(1,1,1),
eyePen=rgb(0.004,0.18,1),
mouthPen=rgb(1,1,1),
scalesPen=rgb(0.98,1,0)+12pt;
pair[][] bBody={
    {(454,270),(436,252),(443,251),},{(433,269),(424,286),(398,322),},
    {(361,352),(324,382),(276,405),},{(218,394),(160,382),(92,334),},
    {(55,295),(18,256),(12,226),},{(13,187),(14,149),(21,102),},
    {(65,66),(109,30),(189,3),},{(243,2),(296,1),(322,24),},
    {(348,46),(374,68),(398,89),},{(414,109),(430,129),(437,149),},
    {(450,143),(463,137),(481,105),},{(504,80),(526,55),(552,37),},
    {(568,40),(585,43),(592,66),},{(584,97),(576,128),(553,166),},
    {(542,181),(531,197),(531,189),},{(543,204),(555,218),(579,256),},
    {(585,286),(591,316),(578,339),},{(571,349),(563,359),(561,356),},
    {(538,338),(515,320),(472,287),},
};
pair[][] bWhite={
    {(223,261),(227,278),(209,303),},{(192,312),(174,321),(156,315),},
    {(141,304),(127,293),(115,276),},{(116,260),(118,244),(132,228),},
    {(143,222),(155,215),(162,220),},{(179,227),(195,234),(220,244),},
};
pair[][] bEye={
    {(177,256),(180,264),(177,272),},{(171,276),(164,280),(154,279),},
    {(146,276),(139,272),(135,265),},{(136,258),(138,250),(146,241),},
    {(155,241),(163,240),(173,248),},
};
pair[][] bMouth={
    {(143,104),(122,94),(95,92),},
    {(83,86),(71,81),(75,71),},
    {(81,68),(87,65),(96,69),},
    {(105,68),(115,67),(126,62),},
    {(145,74),(165,87),(194,117),},
    {(204,133),(213,150),(204,152),},
    {(192,143),(179,135),(165,115),},
};
pair[][] aScales={
    {(221,370),(236,366),(257,360),(274,346),(292,337),(310,322),(315,305),(317,292),(312,275),
        (301,264),(307,249),(319,241),(331,229),(340,222),(350,210),(352,194),(347,176),(338,163),
        (335,151),(326,144),(319,141),(307,139),(312,123),(318,110),(322,93),(322,79),(321,63),(315,56),(297,46),(288,44),},
    {(387,115),(393,123),(397,139),(399,153),(394,174),(393,180),(401,203),(403,223),(390,243),
        (373,257),(383,268),(384,281),(379,300),(360,330),(328,354),(319,359),},
    {(465,153),(472,171),(460,182),(461,195),(469,204),(470,219),(460,231),(446,237),(432,242),},
    {(513,111),(520,120),(522,131),(515,143),(507,153),(511,164),(515,174),(510,187),
        (509,205),(511,219),(509,233),(517,243),(521,251),(519,265),(512,280),(507,288),},
    {(547,68),(556,73),(559,83),(559,94),(562,106),(563,112),},
    {(574,286),(567,291),(562,297),(557,301),(563,304),(564,313),(554,318),(546,323),},
};
pen[] penList={bodyPen, whitePen, eyePen, mouthPen};
pair[][][] pointList={bBody, bWhite, bEye, bMouth};
guide buildBguide(pair[][] aPoints){
    int n=aPoints.length;  guide g=aPoints[0][0]; 
    for(int i=0;i<n-1;++i){
        g=g..controls aPoints[i][1] and aPoints[i][2]..aPoints[i+1][0]; 
    }
    return g..controls aPoints[n-1][1] and aPoints[n-1][2]..cycle; 
};
guide buildGuide(pair[] aPoints){
    guide g; for(int i=0;i<aPoints.length;++i)g=g..aPoints[i]; 
    return g;
};
fill(box(0,(w-1,h-1)),bgPen);
for(int i=0;i<pointList.length;++i){
    fill(buildBguide(pointList[i]),penList[i]);
}
for(int i=0;i<aScales.length;++i){
    draw(buildGuide(aScales[i]),scalesPen);
}

Run asy fish to get fish.pdf.

* Edit: * enter image description here

Just for a little bit more fun, with minimal touch:

// fish.asy
//
settings.outformat="pdf";
real w=600,h=400; size(h,w);
pen bgPen=rgb(0,0.647,1),
bodyPen=rgb(0.847,0.196,0.133),
whitePen=rgb(1,1,1),
eyePen=rgb(0.004,0.18,1)+opacity(0.01),
mouthPen=rgb(1,1,1),
scalesPen=rgb(0.98,1,0)+12pt;
pair[][] bBody={
    {(454,270),(436,252),(443,251),},{(433,269),(424,286),(398,322),},
    {(361,352),(324,382),(276,405),},{(218,394),(160,382),(92,334),},
    {(55,295),(18,256),(12,226),},{(13,187),(14,149),(21,102),},
    {(65,66),(109,30),(189,3),},{(243,2),(296,1),(322,24),},
    {(348,46),(374,68),(398,89),},{(414,109),(430,129),(437,149),},
    {(450,143),(463,137),(481,105),},{(504,80),(526,55),(552,37),},
    {(568,40),(585,43),(592,66),},{(584,97),(576,128),(553,166),},
    {(542,181),(531,197),(531,189),},{(543,204),(555,218),(579,256),},
    {(585,286),(591,316),(578,339),},{(571,349),(563,359),(561,356),},
    {(538,338),(515,320),(472,287),},
};
pair[][] bWhite={
    {(223,261),(227,278),(209,303),},{(192,312),(174,321),(156,315),},
    {(141,304),(127,293),(115,276),},{(116,260),(118,244),(132,228),},
    {(143,222),(155,215),(162,220),},{(179,227),(195,234),(220,244),},
};
pair[][] bEye={
    {(177,256),(180,264),(177,272),},{(171,276),(164,280),(154,279),},
    {(146,276),(139,272),(135,265),},{(136,258),(138,250),(146,241),},
    {(155,241),(163,240),(173,248),},
};
pair[][] bMouth={
    {(143,104),(122,94),(95,92),},
    {(83,86),(71,81),(75,71),},
    {(81,68),(87,65),(96,69),},
    {(105,68),(115,67),(126,62),},
    {(145,74),(165,87),(194,117),},
    {(204,133),(213,150),(204,152),},
    {(192,143),(179,135),(165,115),},
};
pair[][] aScales={
    {(221,370),(236,366),(257,360),(274,346),(292,337),(310,322),(315,305),(317,292),(312,275),
        (301,264),(307,249),(319,241),(331,229),(340,222),(350,210),(352,194),(347,176),(338,163),
        (335,151),(326,144),(319,141),(307,139),(312,123),(318,110),(322,93),(322,79),(321,63),(315,56),(297,46),(288,44),},
    {(387,115),(393,123),(397,139),(399,153),(394,174),(393,180),(401,203),(403,223),(390,243),
        (373,257),(383,268),(384,281),(379,300),(360,330),(328,354),(319,359),},
    {(465,153),(472,171),(460,182),(461,195),(469,204),(470,219),(460,231),(446,237),(432,242),},
    {(513,111),(520,120),(522,131),(515,143),(507,153),(511,164),(515,174),(510,187),
        (509,205),(511,219),(509,233),(517,243),(521,251),(519,265),(512,280),(507,288),},
    {(547,68),(556,73),(559,83),(559,94),(562,106),(563,112),},
    {(574,286),(567,291),(562,297),(557,301),(563,304),(564,313),(554,318),(546,323),},
};
guide buildBguide(pair[][] aPoints){
    int n=aPoints.length;  guide g=aPoints[0][0]; 
    for(int i=0;i<n-1;++i){
        g=g..controls aPoints[i][1] and aPoints[i][2]..aPoints[i+1][0]; 
    }
    return g..controls aPoints[n-1][1] and aPoints[n-1][2]..cycle; 
};
guide buildGuide(pair[] aPoints){
    guide g; for(int i=0;i<aPoints.length;++i)g=g..aPoints[i]; 
    return g;
};
axialshade(box(0,(w-1,h-1)),deepblue,(0,3),palegreen,(0,600));
axialshade(buildBguide(bBody),paleyellow+opacity(0.6),(0,3),deepred,(0,200));

guide gWhite=buildBguide(bWhite);
guide gEye=buildBguide(bEye);
pair whiteCenter=(max(gWhite)+min(gWhite))/2;
pair eyeCenter=(max(gEye)+min(gEye))/2;
radialshade(gWhite,white,whiteCenter,20, orange,whiteCenter,60);
radialshade(gEye,black,eyeCenter,6, deepgreen,eyeCenter,20);
fill(buildBguide(bMouth),mouthPen);

for(int i=0;i<aScales.length;++i){
    draw(buildGuide(aScales[i]),scalesPen);
}

int n=99;  real llen=20,s;
pair lpoint,ldir;
for(int i=0;i<n;++i){
    s=i/(n-2);
    lpoint=relpoint(gWhite,s);
    ldir=rotate(90)*reldir(gWhite,s);
    draw(lpoint--(lpoint+llen*sin(2*pi*s)*ldir),black);
}

* Edit-3d *

More fun, this time in 3d:

enter image description here

// fish3d.asy
//
real w=8cm,h=0.618w;
size(h,w);

import solids;
currentprojection=orthographic(
camera=(-230,60,133),up=three.Y,target=(5,21,2),zoom=0.8);
currentlight=White;

include "fish3d05.asy";

material m_Skin=material(diffusepen=gray(0), emissivepen=rgb(0.8,0,0), specularpen=gray(1),    shininess=0.15);
material m_eyeW=material(diffusepen=gray(0.001), emissivepen=gray(0.45), specularpen=gray(0.9),shininess=0.15);
material m_eyeB=material(diffusepen=gray(0.001), emissivepen=gray(0.01), specularpen=gray(0.9),shininess=0.15);

draw(surface(P),m_Skin);

triple c0=(-42,42,0);
triple c1=(-42,42,-20);
triple c2=(-42,42,22);

real R=10, r=3;
draw(surface(sphere(c1,R)),surfacepen=m_eyeW);
draw(surface(sphere(c2,R)),surfacepen=m_eyeW);

draw(surface(rotate(70,c1-(0,1,0),c1+(0,1,0))*sphere(c1-(R-r*0.62)*(three.Z),r)) ,m_eyeB);
draw(surface(rotate(-60,c2-(0,1,0),c2+(0,1,0))*sphere(c2+(R-r*0.62)*(three.Z),r)),m_eyeB);

And the shape in fish3d05.asy file:

// fish3d05.asy

triple[][][] P={
{{(-77,42,0),(-78,42,7),(-71,37,14),(-68,22,14)},
{(-98,26,0),(-98,27,7),(-91,29,7),(-89,13,7)},
{(-119,20,0),(-119,20,1),(-115,13,5),(-113,7,5)},
{(-87,18,0),(-87,18,1),(-85,13,2),(-83,7,2)},
},{
{(-16,75,0),(-16,74,14),(-11,65,29),(-9,37,30)},
{(-38,80,0),(-38,80,14),(-31,67,31),(-30,39,31)},
{(-57,57,0),(-58,58,7),(-50,45,20),(-47,30,20)},
{(-77,42,0),(-78,42,7),(-71,37,14),(-68,22,14)},
},{
{(49,26,0),(50,26,5),(51,24,9),(51,20,9)},
{(33,34,0),(34,34,5),(35,25,14),(36,22,14)},
{(7,69,0),(7,69,14),(10,63,27),(12,35,28)},
{(-16,75,0),(-16,74,14),(-11,65,29),(-9,37,30)},
},{
{(80,39,-1),(80,39,4),(84,43,9),(83,30,9)},
{(71,36,-1),(71,36,4),(75,41,10),(75,28,10)},
{(65,17,0),(66,17,5),(67,22,5),(67,18,5)},
{(49,26,0),(50,26,5),(51,24,9),(51,20,9)},
},{
{(65,26,0),(66,26,0),(66,23,0),(66,20,0)},
{(101,33,0),(102,33,0),(102,29,2),(102,26,2)},
{(89,43,-1),(89,43,4),(92,46,8),(92,32,8)},
{(80,39,-1),(80,39,4),(84,43,9),(83,30,9)},
},{
{(-87,18,0),(-87,18,1),(-85,13,2),(-83,7,2)},
{(-55,16,0),(-55,16,1),(-56,13,0),(-54,7,0)},
{(29,19,0),(30,19,0),(29,16,-2),(29,14,-2)},
{(65,26,0),(66,26,0),(66,23,0),(66,20,0)},
},{
{(-68,22,14),(-65,6,14),(-67,-20,7),(-67,-21,0)},
{(-89,13,7),(-86,-2,7),(-87,-12,6),(-86,-13,-1)},
{(-113,7,5),(-111,0,5),(-108,-14,1),(-108,-15,0)},
{(-83,7,2),(-81,1,2),(-79,-6,1),(-79,-7,0)},
},{
{(-9,37,30),(-8,9,30),(-10,-39,16),(-10,-38,2)},
{(-30,39,31),(-28,11,32),(-31,-47,16),(-30,-47,2)},
{(-47,30,20),(-45,14,20),(-48,-28,7),(-47,-29,1)},
{(-68,22,14),(-65,6,14),(-67,-20,7),(-67,-21,0)},
},{
{(51,20,9),(52,16,9),(51,10,5),(50,10,0)},
{(36,22,14),(36,18,14),(36,6,5),(35,6,1)},
{(12,35,28),(13,7,28),(10,-30,16),(11,-30,2)},
{(-9,37,30),(-8,9,30),(-10,-39,16),(-10,-38,2)},
},{
{(83,30,9),(83,16,9),(79,-14,5),(79,-14,0)},
{(75,28,10),(74,14,10),(71,-14,5),(71,-14,0)},
{(67,18,5),(67,14,5),(66,14,4),(65,14,-1)},
{(51,20,9),(52,16,9),(51,10,5),(50,10,0)},
},{
{(66,20,0),(66,18,0),(65,15,0),(65,16,0)},
{(102,26,2),(102,24,2),(100,11,0),(99,12,0)},
{(92,32,8),(92,19,9),(88,-15,5),(88,-15,0)},
{(83,30,9),(83,16,9),(79,-14,5),(79,-14,0)},
},{
{(-83,7,2),(-81,1,2),(-79,-6,1),(-79,-7,0)},
{(-54,7,0),(-52,1,0),(-50,2,2),(-50,1,0)},
{(29,14,-2),(29,11,-2),(31,19,0),(31,20,0)},
{(66,20,0),(66,18,0),(65,15,0),(65,16,0)},
},{
{(-67,-21,0),(-66,-22,-7),(-63,3,-14),(-66,18,-14)},
{(-86,-13,-1),(-85,-14,-8),(-84,-7,-9),(-87,9,-9)},
{(-108,-15,0),(-108,-16,-2),(-110,-3,-6),(-112,3,-6)},
{(-79,-7,0),(-79,-8,-1),(-81,-2,-3),(-83,4,-3)},
},{
{(-10,-38,2),(-10,-38,-12),(-7,11,-25),(-8,39,-25)},
{(-30,-47,2),(-30,-47,-12),(-26,12,-26),(-27,40,-27)},
{(-47,-29,1),(-47,-30,-6),(-42,12,-19),(-44,28,-19)},
{(-67,-21,0),(-66,-22,-7),(-63,3,-14),(-66,18,-14)},
},{
{(50,10,0),(49,10,-5),(49,16,-10),(49,20,-10)},
{(35,6,1),(34,6,-4),(33,18,-13),(33,22,-13)},
{(11,-30,2),(11,-29,-12),(13,9,-23),(11,37,-24)},
{(-10,-38,2),(-10,-38,-12),(-7,11,-25),(-8,39,-25)},
},{
{(79,-14,0),(79,-14,-5),(83,16,-10),(83,30,-10)},
{(71,-14,0),(70,-14,-5),(73,14,-11),(74,27,-11)},
{(65,14,-1),(64,14,-5),(64,13,-7),(64,17,-7)},
{(50,10,0),(49,10,-5),(49,16,-10),(49,20,-10)},
},{
{(65,16,0),(65,16,0),(65,18,0),(65,20,0)},
{(99,12,0),(99,12,0),(102,25,-2),(102,27,-2)},
{(88,-15,0),(88,-15,-5),(92,19,-9),(92,32,-9)},
{(79,-14,0),(79,-14,-5),(83,16,-10),(83,30,-10)},
},{
{(-79,-7,0),(-79,-8,-1),(-81,-2,-3),(-83,4,-3)},
{(-50,1,0),(-50,0,-1),(-52,-1,0),(-54,5,0)},
{(31,20,0),(31,20,0),(28,11,2),(28,14,2)},
{(65,16,0),(65,16,0),(65,18,0),(65,20,0)},
},{
{(-66,18,-14),(-68,34,-14),(-77,41,-7),(-77,42,0)},
{(-87,9,-9),(-89,25,-9),(-97,26,-7),(-98,26,0)},
{(-112,3,-6),(-114,9,-6),(-119,19,-1),(-119,20,0)},
{(-83,4,-3),(-85,10,-3),(-87,17,-1),(-87,18,0)},
},{
{(-8,39,-25),(-10,67,-26),(-15,75,-14),(-16,75,0)},
{(-27,40,-27),(-29,68,-27),(-38,81,-14),(-38,80,0)},
{(-44,28,-19),(-47,43,-19),(-57,56,-7),(-57,57,0)},
{(-66,18,-14),(-68,34,-14),(-77,41,-7),(-77,42,0)},
},{
{(49,20,-10),(48,24,-10),(49,26,-5),(49,26,0)},
{(33,22,-13),(33,26,-13),(33,34,-5),(33,34,0)},
{(11,37,-24),(10,66,-24),(7,69,-14),(7,69,0)},
{(-8,39,-25),(-10,67,-26),(-15,75,-14),(-16,75,0)},
},{
{(83,30,-10),(83,43,-10),(80,39,-5),(80,39,-1)},
{(74,27,-11),(74,41,-11),(71,36,-5),(71,36,-1)},
{(64,17,-7),(64,21,-7),(64,17,-5),(65,17,0)},
{(49,20,-10),(48,24,-10),(49,26,-5),(49,26,0)},
},{
{(65,20,0),(65,23,0),(65,26,0),(65,26,0)},
{(102,27,-2),(102,30,-2),(101,33,0),(101,33,0)},
{(92,32,-9),(93,46,-9),(89,43,-5),(89,43,-1)},
{(83,30,-10),(83,43,-10),(80,39,-5),(80,39,-1)},
},{
{(-83,4,-3),(-85,10,-3),(-87,17,-1),(-87,18,0)},
{(-54,5,0),(-56,11,0),(-55,15,-1),(-55,16,0)},
{(28,14,2),(28,16,2),(29,19,0),(29,19,0)},
{(65,20,0),(65,23,0),(65,26,0),(65,26,0)},
}};
g.kov
  • 21,864
  • 1
  • 58
  • 95
  • 2
    +1, gorgeous! Did you use a tool to create this answer? See the edit of my question. – CarLaTeX Apr 02 '17 at 06:49
  • 4
    @CarLaTeX: yes, basically, InkScape to convert png to eps, pstoedit to convert eps to get the basic contours in plain asy, then mostly cleaning a bit. – g.kov Apr 02 '17 at 10:01
  • Excellent job! Sorry for the prank! :):):) – CarLaTeX Apr 02 '17 at 10:05
  • @g.kov When you used Inkscape then the way to get the picture in TeX document is more simple: export Inkscape result to PDF and include PDF image using \pdfximage (or similar tools like \includegraphics). No asymptote is needed. – wipet Apr 03 '17 at 09:48
  • 1
    @wipet: Sure, but what would be the fun in that? The question is not serious anyway, nevertheless it provides the opportunity to show the way to access the geometry of the picture from the LaTeX world. Look closely: the original picture is not the same as the reconstructed one. Changes are minimal here, but consider, for example, adding fish dimensions, area, some text along the curve, fish-shaped paragraph, adding shading, animation or even a blowing the fish into 3D image, you name it. – g.kov Apr 03 '17 at 11:29
  • I'd be interested in the 3D version (PRC?). – AlexG Apr 03 '17 at 14:16
  • @wipet One of your raw \pdfliteral designs is missing :) – Manuel Apr 05 '17 at 08:00
  • 1
    @AlexG: yes, see added 3D fun version. – g.kov Apr 05 '17 at 09:55
  • The 3D version actually deserves the bounty! :):):) – CarLaTeX Apr 05 '17 at 10:41
39
\documentclass{article}
\usepackage{tikz,stackengine}

\begin{document}
\savestack\fish{%
    \begin{tikzpicture}
        \draw[fill=blue] (.5,0) rectangle (4,2);
        \draw[fill=red] (1,1) to[bend left=50] (3,1) to[bend left=50] (1,1);
        \draw[fill=red] (3,1) -- (3.5,1.5) -- (3.3,1) -- (3.5,.5) -- cycle;
        \draw[fill=white] (1.6,1.1) circle (.15cm); 
        \draw[fill=blue] (1.55,1.1) circle (.05cm);         
    \end{tikzpicture}
}
\color{yellow}%
  \stackinset{c}{-2em}{c}{-.75em}{%
    \rotatebox{-150}{\scalebox{1}[.5]{\textcolor{white}{$\frown$}}}}{%
  \stackinset{c}{}{c}{}{%
    \scalebox{.7}{\rotatebox{-90}{$\frown\!\frown\!\frown$}}}{%
  \stackinset{c}{.7em}{c}{}{%
    \scalebox{.7}[.5]{\rotatebox{-90}{$\frown\!\frown\!\frown$}}}{%
  \stackinset{c}{1.3em}{c}{}{%
    \scalebox{.5}[.3]{\rotatebox{-90}{$\frown\!\frown\!\frown$}}}{%
  \stackinset{c}{2.6em}{c}{}{%
    \scalebox{.4}[.3]{\rotatebox{-90}{$\frown~\frown$}}}{%
  \stackinset{c}{2.9em}{c}{}{%
    \scalebox{.3}[.3]{\rotatebox{-90}{$\frown~~~~~~~~\frown$}}}{%
  \fish}}}}}}
\end{document}

enter image description here

  • Aw, don't be sad, turn that \frown upside down! – Jason C Apr 01 '17 at 19:38
  • +1, very creative way of using \frown! See the edit of my question! – CarLaTeX Apr 02 '17 at 06:50
  • @CarLaTeX Thank you for the bounty, and the international lesson on what we call in the US "April Fools Day". Here, we have no such fish connection, but pranks are the order of the day. – Steven B. Segletes Apr 04 '17 at 11:27
  • 1
    You're welcome. On Wikipedia they say In 1508, French poet Eloy d'Amerval referred to a poisson d’avril (April fool, literally "Fish of April"), a possible reference to the holiday. Hence I think it's connected to fishes also in France, it'd be interesting to know for which other countries is the same :):):) – CarLaTeX Apr 04 '17 at 11:35
  • @CarLaTeX Corroboration: http://www.history.com/this-day-in-history/april-fools-tradition-popularized, http://metro.co.uk/2017/03/30/where-does-april-fools-day-come-from-6542530/ – Steven B. Segletes Apr 04 '17 at 11:40
  • :):):) confirmed by multiple sources :):):) – CarLaTeX Apr 04 '17 at 11:49
  • 3
    @CarLaTeX To steal from one source is plagiarism...to steal from many is research. – Steven B. Segletes Apr 04 '17 at 11:52
34

A couple of hours late:

\documentclass{article}
\usepackage{lmodern,graphicx,color}
\def\familydefault{\sfdefault}
\def\seriesdefault{\bfdefault}
\def\chihapaura#1#2?{\color{\ifcase#1red\or yellow\or blue\fi}%
       \fontsize{#2\unitlength}{0pt}\selectfont}
\begin{document}
\begin{picture}(50,50)
  \put(46,18) {\chihapaura112?E}
  \put(38,15) {\chihapaura020?C}
  \put(29,5)  {\chihapaura121?\scalebox1[2.5]{S}}
  \put(0,0)   {\chihapaura0100?$\epsilon$}
  \put(7,20)  {\chihapaura230?\rotatebox{-24}{p}}
\end{picture}%(d'aprile)
\end{document}

d'aprile

Robert
  • 14,181
  • 1
  • 52
  • 77
32

A (poor) mathematical fish.

${\cdot}\kern -4pt {\subset}\kern -3pt {\rtimes}$

enter image description here

Sigur
  • 37,330
29

A Metafish, with fins...

enter image description here

prologues := 3;
outputtemplate := "%j%c.eps";

beginfig(1);

    u = 20;
path dorso, ventro;
dorso  = ((-1/4,0) .. (0,1/2) .. (1,9/8) .. (2,5/4) .. (4,1) .. (6,2/3) .. (7.5,17/16)) scaled u;
ventro = ((0,-1/3)..(1,-1)..(4.4,-1)..(6,-1/2)..(7.5,-17/16)) scaled u;

picture eye;
eye = image(
    fill fullcircle scaled 10 withcolor white;
    draw fullcircle scaled 10;
    fill fullcircle scaled 5 shifted 1/2(-1,1);
    unfill fullcircle scaled 1 shifted (-1,1);
    fill   fullcircle scaled 1/2 shifted (-2.73,2.73);
);

path tail[]; n=16;
for t=1 upto n-1:
    tail[t] = interpath(t/n,subpath(5,6) of dorso, subpath(3,4) of ventro);
    tail[t] := tail[t] shifted (3-sqrt(abs(ypart point 0 of tail[t])),0);
endfor

path body;
body = reverse ventro .. (1/8u,-1/8u) {left} .. (-1/4u,0) & dorso
    for i=1 upto n-1: .. point 1 of tail[i] {dir -40} endfor .. cycle; 

path a,b;
a = point 3   of dorso {direction 3 of dorso rotated 72} .. point 3   of dorso shifted (1/4u,1/2u+normaldeviate);
b = point 4.5 of dorso {direction 4.5 of dorso rotated 90}     .. point 4.5 of dorso shifted (1/3u,3/4u+normaldeviate);

path f[];
for t=0 upto 32: f[t] = subpath(0,7/8-(t**5/4)/512+1/64 normaldeviate) of interpath(t/32,a,b); endfor
for t=0 upto 32: draw f[t]; endfor
draw point 1 of f[0] for t=1 upto 32: .. {dir 60} point 1 of f[t] endfor;

path a,b;
a = point 1.5   of ventro {direction 2 of ventro rotated -72} 
 .. point 1.5   of ventro shifted (1/4u,-1/2u+normaldeviate);
b = point 3 of ventro {direction 3 of ventro rotated -90}     
 .. point 3 of ventro shifted (1/3u,-3/4u+normaldeviate);

path f[];
for t=0 upto 16: f[t] = subpath(0,7/8+1/64 normaldeviate) of interpath(t/32,a,b); endfor
for t=0 upto 16: draw f[t]; endfor
draw point 1 of f[0] for t=1 upto 16: .. {dir 60} point 1 of f[t] endfor;

fill body withcolor 3/4[1/3[blue,green],white];
draw body;
for t=1 upto n-1:   draw tail[t]; endfor
draw eye rotated -10 shifted (1/2u,1/4u);
endfig;
end.
Thruston
  • 42,268
  • I like this fish best among the fish here. What a pity that it is not tikzed. – Epa Dec 02 '18 at 15:42
  • Thank you! TikZ is not always the best drawing tool... I do my best to show that Metapost still has some useful features. It's also a much more interesting and entertaining language... In this drawing I found MP's interpath and normaldeviate useful. – Thruston Dec 03 '18 at 00:05
24

Let us add a shapepar answer, including ducks too:

\documentclass{article}
\usepackage[margin=2cm,landscape]{geometry}
\usepackage{shapepar}

\def\fishpar#1{\shapepar{\fishshape}#1\par}
\def\fishshape{%
{25.6127}%
{0.857843}b{50.6127}\\%
{1.59314}t{50}{0.40266}\\%
{1.71569}t{49.895}{0.47269}\\%
{2.32843}b{22.1814}t{49.3697}{0.793652}\\%
{2.45098}t{21.3235}{1.71569}t{49.2647}{0.857843}\\%
{2.57353}t{20.3431}{3.43137}t{49.183}{0.89869}\\%
{2.69608}t{19.7304}{4.77941}t{49.1013}{0.939545}\\%
{2.81863}t{19.1176}{5.94363}t{49.0196}{0.980392}\\%
{2.94118}t{18.5049}{7.10784}t{48.9379}{1.02124}\\%
{3.06373}t{17.8922}{8.33333}t{48.8562}{1.06209}\\%
{3.18627}t{16.9118}{9.92647}t{48.7745}{1.10294}\\%
{3.43137}t{16.1765}{11.3971}t{48.6111}{1.18464}\\%
{3.55392}t{15.8088}{12.1324}t{48.5294}{1.22549}\\%
{3.67647}t{15.4412}{12.8676}t{48.4314}{1.28268}\\%
{3.92157}t{14.7059}{14.3382}t{48.2353}{1.39706}\\%
{4.28922}t{13.9706}{15.9314}t{47.9412}{1.58613}\\%
{4.41176}t{13.7255}{16.4216}t{47.8431}{1.64916}\\%
{4.65686}t{13.2353}{17.402}t{47.6471}{1.77521}\\%
{4.77941}t{12.9902}{17.8309}t{47.549}{1.83824}\\%
{4.90196}t{12.7451}{18.2598}t{47.4673}{1.8893}\\%
{5.14706}t{12.2549}{19.1176}t{47.3039}{1.99142}\\%
{5.51471}t{11.5196}{20.5882}t{47.0588}{2.14461}\\%
{5.7598}t{11.0294}{21.5686}t{46.8954}{2.24673}\\%
{5.88235}t{10.7843}{22.0588}t{46.8137}{2.3012}\\%
{6.25}t{10.2328}{23.125}t{46.5686}{2.4646}\\%
{6.4951}t{9.8652}{23.8358}t{46.3904}{2.58838}\\%
{6.61765}t{9.68137}{24.2647}t{46.3012}{2.65028}\\%
{6.86275}t{9.19118}{25.2451}t{46.123}{2.77406}\\%
{7.23039}t{8.45588}{26.5319}t{45.8556}{2.95975}\\%
{7.35294}t{8.2598}{26.9118}t{45.7665}{3.02164}\\%
{7.59804}t{7.86765}{27.6307}t{45.5882}{3.14542}\\%
{7.84314}t{7.47549}{28.3497}t{45.41}{3.26921}\\%
{7.96569}t{7.31209}{28.6765}t{45.3209}{3.33111}\\%
{8.08823}t{7.14869}{29.0033}t{45.2317}{3.38959}\\%
{8.21078}t{6.98529}{5.26961}st{12.2549}{24.1013}t{45.1426}{3.44808}\\%
{8.21078}t{6.98529}{4.77941}t{12.2549}{24.1013}t{45.1426}{3.44808}\\%
{8.33333}t{6.8219}{4.57516}t{12.6225}{23.9379}t{45.0535}{3.50657}\\%
{8.45588}t{6.6585}{4.49346}t{12.8676}{23.8971}t{44.9643}{3.56506}\\%
{8.57843}t{6.4951}{4.41176}t{13.1127}{23.8562}t{44.8752}{3.62355}\\%
{8.70098}t{6.29902}{4.36274}t{13.3578}{23.8154}t{44.7861}{3.68204}\\%
{8.82353}t{6.10294}{4.49755}t{13.4191}{23.9583}t{44.697}{3.74053}\\%
{8.94608}t{5.90686}{4.63235}t{13.4804}{24.0721}t{44.6078}{3.79902}\\%
{9.06863}t{5.71078}{4.58333}t{13.7255}{24.0021}t{44.5261}{3.86321}\\%
{9.19118}t{5.51471}{4.71814}t{13.7868}{24.1159}t{44.4444}{3.92741}\\%
{9.31373}t{5.34314}{4.82843}t{13.848}{24.2297}t{44.3627}{3.9916}\\%
{9.55882}t{5}{5.04902}t{13.9706}{24.4573}t{44.1993}{4.11998}\\%
{9.68137}t{4.82843}{5.22059}t{13.9706}{24.6324}t{44.1176}{4.18417}\\%
{9.80392}t{4.65686}{5.39216}t{13.9706}{24.8162}t{44.0359}{4.24836}\\%
{9.92647}t{4.47304}{5.57598}t{13.9706}{25}t{43.9542}{4.30964}\\%
{10.049}t{4.28922}{5.69853}t{14.0319}{25.1225}t{43.8726}{4.37091}\\%
{10.1716}t{4.10539}{5.82108}t{14.0931}{25.2451}t{43.785}{4.43803}\\%
{10.2941}t{3.92157}{6.0049}t{14.0931}{25.4289}t{43.6975}{4.50514}\\%
{10.4167}t{3.77451}{6.15196}t{14.0931}{25.6127}t{43.6099}{4.57224}\\%
{10.5392}t{3.62745}{6.36029}t{14.0319}{25.8374}t{43.5224}{4.63936}\\%
{10.6618}t{3.48039}{6.56863}t{13.9706}{26.0621}t{43.4349}{4.72689}\\%
{10.9069}t{3.18627}{6.86275}t{13.9706}{26.3889}t{43.2598}{4.90196}\\%
{11.0294}t{3.00245}{7.04657}t{13.9706}{26.5523}t{43.1723}{4.9895}\\%
{11.152}t{2.81863}{7.29167}t{13.9093}{26.777}t{43.0847}{5.07703}\\%
{11.2745}t{2.6348}{7.53676}t{13.848}{27.0527}t{42.9972}{5.16457}\\%
{11.3971}t{2.45098}{7.78186}t{13.7868}{27.3284}t{42.9097}{5.2521}\\%
{11.5196}t{2.28758}{8.00654}t{13.7255}{27.6042}t{42.8221}{5.33964}\\%
{11.6422}t{2.12418}{8.41503}t{13.4804}{28.0637}t{42.7346}{5.42717}\\%
{11.7647}t{1.96078}{8.63971}t{13.4191}{28.3088}t{42.6471}{5.51471}\\%
{11.8873}t{1.79739}{8.86438}t{13.3578}{28.5539}t{42.5245}{5.63725}\\%
{12.0098}t{1.63399}{9.27288}t{13.1127}{28.9828}t{42.402}{5.7598}\\%
{12.1324}t{1.47059}{9.68137}t{12.8676}{29.4118}jt{42.2794}{5.88235}\\%
{12.2549}t{1.29902}{10.098}t{12.6225}{35.5392}\\%
{12.3775}t{1.12745}{10.6373}t{12.2549}{35.9069}\\%
{12.3775}t{1.12745}{10.6373}jt{11.7647}{36.3971}\\%
{12.7451}t{0.612745}{47.5082}\\%
{13.4804}t{0.980392}{47.0588}\\%
{13.9706}t{1.71569}{46.4052}\\%
{14.2157}t{2.04248}{46.1193}\\%
{14.7059}t{2.69608}{45.5474}\\%
{14.951}t{3.10458}{45.1797}\\%
{15.1961}t{3.51307}{38.7663}st{42.2794}{6.0049}\\%
{15.4412}t{3.92157}{38.0637}t{42.4837}{5.80065}\\%
{15.6863}t{4.27171}{37.4195}t{42.6879}{5.5964}\\%
{15.8088}t{4.44678}{37.0973}t{42.79}{5.52492}\\%
{15.9314}t{4.62185}{36.7384}t{42.8922}{5.45343}\\%
{16.299}t{5.14706}{35.6618}t{43.1373}{5.30025}\\%
{16.6667}t{5.67227}{34.5483}t{43.3824}{5.14706}\\%
{16.9118}t{6.02241}{33.806}t{43.5458}{5.01867}\\%
{17.0343}t{6.19748}{33.3859}t{43.6275}{4.95448}\\%
{17.1569}t{6.37255}{32.9657}t{43.7347}{4.86476}\\%
{17.2794}t{6.54762}{32.5455}t{43.8419}{4.77504}\\%
{17.5245}t{6.89776}{31.8277}t{44.0564}{4.59559}\\%
{17.7696}t{7.2479}{31.1099}t{44.2708}{4.42198}\\%
{18.0147}t{7.59804}{30.3922}t{44.4853}{4.24836}\\%
{18.2598}t{7.9902}{29.6324}t{44.6814}{4.09314}\\%
{18.6275}t{8.57843}{28.3088}t{44.9755}{3.89093}\\%
{18.75}t{8.76225}{27.8799}t{45.0735}{3.82353}\\%
{19.1176}t{9.31373}{26.7402}t{45.3676}{3.62132}\\%
{19.2402}t{9.49755}{26.3603}t{45.4657}{3.55392}\\%
{19.3627}t{9.68137}{25.9804}t{45.5637}{3.4909}\\%
{19.6078}t{10.049}{25.0613}t{45.7598}{3.36485}\\%
{19.8529}t{10.4779}{24.0809}t{45.9559}{3.23879}\\%
{20.098}t{10.9069}{23.1618}t{46.152}{3.11274}\\%
{20.4657}t{11.6422}{21.6912}t{46.4461}{2.8799}\\%
{20.5882}t{11.8873}{21.1397}t{46.5352}{2.8112}\\%
{20.8333}t{12.3775}{20.0368}t{46.7135}{2.6738}\\%
{20.9559}t{12.6225}{19.4853}t{46.8026}{2.61968}\\%
{21.0784}t{12.8676}{18.9542}t{46.8917}{2.56557}\\%
{21.3235}t{13.7255}{17.5245}t{47.07}{2.45735}\\%
{21.6912}t{14.5833}{15.9314}t{47.3373}{2.29501}\\%
{21.8137}t{14.9101}{15.3595}t{47.4265}{2.23652}\\%
{22.0588}t{15.5637}{13.9706}t{47.6443}{2.07993}\\%
{22.3039}t{16.6667}{11.8873}t{47.8622}{1.92334}\\%
{22.549}t{17.402}{10.049}t{48.0801}{1.76675}\\%
{22.6716}t{17.7696}{9.06863}t{48.189}{1.68845}\\%
{22.7941}t{18.5049}{7.72059}t{48.2979}{1.61016}\\%
{22.9167}t{19.1176}{6.4951}t{48.4069}{1.53186}\\%
{23.0392}t{19.7304}{5.26961}t{48.5022}{1.46718}\\%
{23.1618}t{20.8333}{3.18627}t{48.5975}{1.40251}\\%
{23.1618}t{21.5686}{1.47059}t{48.5975}{1.40251}\\%
{23.2843}e{22.3039}t{48.6928}{1.33783}\\%
{23.652}t{48.9788}{1.14379}\\%
{24.0196}t{49.2647}{0.949755}\\%
{24.6324}t{49.7753}{0.592322}\\%
{24.7549}t{49.8775}{0.490196}\\%
{25.4902}e{50.3676}%
}

\usepackage{xparse}
\ExplSyntaxOn
\newcommand{\duck}{\prg_replicate:nn {400}{duck~}}
\ExplSyntaxOff

\begin{document}
\thispagestyle{empty}
\fishpar{\duck}
\end{document}

The result:

Quack!

I am hungry. :)

Paulo Cereda
  • 44,220
19

Basic

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-fun}
\begin{document}
\begin{pspicture}(6,4)
    \psFish[fillstyle=slope]
\end{pspicture}
\end{document}

enter image description here

Advanced

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-vehicle,pst-fun}

\def\V{\rput{20}(7.7,.5){\psscalebox{-1.3 1.3}{\psFish[fillstyle=slope]}}}
\def\F{cos(x)/2+x/3}

\begin{document}
\foreach \i in {0,0.2,...,8}{
\begin{pspicture}(-1,0)(11,6)   
    \psplot{-1}{11}{\F}
    \psVehicle[vehicle=\SelfDefinedVehicle,ownvehicle=\V,showSlope=false,frontwheel=\SpokesWheelB,backwheel=\SpokesWheelA,rB=1.2,rF=0.7,d=4.8]{.5}{\i}{\F}
\end{pspicture}}
\end{document}

enter image description here

Display Name
  • 46,933
17
\documentclass[tikz,border=1cm]{standalone}
\usetikzlibrary{fadings}
\tikzset{Pacman/.pic={
\fill (0,0)  to[out={1.75*#1},in={180-0.25*#1}] ({0.92*#1}:2)
 to[out={-180+0.25*#1},in={1.75*#1},looseness=0.5] (1,0) 
 to[out={-1.75*#1},in={180-0.25*#1},looseness=0.5] ({-0.92*#1}:2) 
 to [out={-180+0.25*#1},in={-1.75*#1}] cycle;
\shadedraw[ball color=yellow,thick] 
(0,0)  to[out={1.75*#1},in={180-0.25*#1}] ({0.92*#1}:2)
 arc({0.92*#1}:{360-0.92*#1}:2) to [out={-180+0.25*#1},in={-1.75*#1}]
  cycle;
\fill ({0.3-0.01*#1},1) circle (0.3);
  }
}
\begin{document}
\foreach \i in {0,...,20}
{\pgfmathsetmacro{\myangle}{60-5*abs(\i-10)}
\begin{tikzpicture}[scale=2]
%\begin{scope}[xshift={-(6.5-0.4*\i)*1cm},scale=2]
\fill (0,0)  to[out={1.75*\myangle},in={180-0.25*\myangle}] ({0.92*\myangle}:2)
to[out={-180+0.25*\myangle},in={1.75*\myangle},looseness=0.5] (1,0) 
to[out={-1.75*\myangle},in={180-0.25*\myangle},looseness=0.5]
({-0.92*\myangle}:2) to [out={-180+0.25*\myangle},in={-1.75*\myangle}]   cycle;
%\end{scope}
\pic[xscale=-1] at (5-0.30*\i,0) {Pacman=\myangle};
%\begin{scope}[xshift={-(6.5-0.4*\i)*1cm},scale=2]
\shade[postaction={path fading=east,fill=white}] [ball color=yellow,thick] 
(0,0)  to[out={1.75*\myangle},in={180-0.25*\myangle}] ({0.92*\myangle}:2)
 arc({0.92*\myangle}:{360-0.92*\myangle}:2) to [out={-180+0.25*\myangle},in={-1.75*\myangle}]
  cycle;
\fill ({0.35-0.015*\myangle},1) circle (0.3);
\shade[postaction={path fading=west,fill=white}]
[postaction={path fading=west,fading angle=45,fill=blue,opacity=.5}] 
[top color=red!20,bottom color=red,opacity=0.6] (0,2) to[out=180,in=20] (-4,1) to[out=-160,in=-20] (-5,1)
to[out=160,in=-45] (-6,1.8) to[out=-80,in=80] (-6,-1.6)
to[out=45,in=-160] (-5,-0.8) to[out=20,in=160] (-4,-0.8)
to[out=-20,in=180] (0,-2) to[out=160,in=-160] cycle;
%\end{scope}
\path[use as bounding box](-8,-2) rectangle (4,2);
\end{tikzpicture}
}
\end{document}

enter image description here

8

An alphish

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\newcommand{\alphish}{%
  \begin{tikzpicture}[x=1em,y=1ex, every node/.style={inner sep=0 cm, outer sep=0 cm}]
    \node {\(\alpha\)} node at (-0.1,0.2) {.} node at (-0.1,-0.1) {-};
  \end{tikzpicture}
}
\begin{document}
\begin{tikzpicture}
  \node {\(\circ\)} node at (-0.2,0.1) {\(\circ\)} node at (0,0.3) {\(\circ\)} node at (-0.1,0.5) {\(\circ\)};
\end{tikzpicture}
\Huge\alphish\LARGE\alphish\normalsize\alphish\alphish\alphish
\end{document}\

Four small fishes made with the alpha symbol (\hbar=\frac{h}{2\pi}) \quad and \quad (\alphish=\frac{\alpha}{2\pi})

3

You want a fish? I'll give you three!

\documentclass{minimal}
\begin{document}
$a \quad \alpha \quad \propto$
\end{document}

and the result looks like this :)

enter image description here

nalzok
  • 141