63

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?
9
  • 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 1, 2017 at 6:20
  • 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 2, 2017 at 2: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 4, 2017 at 19:34
  • 1
    @EnricoMariaDeAngelis You can learn it in the future and win the 200 points bounty! :):):):)
    – CarLaTeX
    Apr 4, 2017 at 19:43
  • 1
    @EnricoMariaDeAngelis see Paulo's answer!
    – CarLaTeX
    Apr 5, 2017 at 13:24

10 Answers 10

33

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

1
  • sweet! you got my vote :)
    – Georges
    Apr 3, 2017 at 15:02
57
+100

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)},
}};
9
  • 2
    +1, gorgeous! Did you use a tool to create this answer? See the edit of my question.
    – CarLaTeX
    Apr 2, 2017 at 6: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 2, 2017 at 10:01
  • Excellent job! Sorry for the prank! :):):)
    – CarLaTeX
    Apr 2, 2017 at 10:05
  • 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 3, 2017 at 11:29
  • 1
    @AlexG: yes, see added 3D fun version.
    – g.kov
    Apr 5, 2017 at 9:55
38
+50
\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

7
  • Aw, don't be sad, turn that \frown upside down!
    – Jason C
    Apr 1, 2017 at 19:38
  • +1, very creative way of using \frown! See the edit of my question!
    – CarLaTeX
    Apr 2, 2017 at 6: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. Apr 4, 2017 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 4, 2017 at 11:35
  • 3
    @CarLaTeX To steal from one source is plagiarism...to steal from many is research. Apr 4, 2017 at 11:52
32

A (poor) mathematical fish.

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

enter image description here

4
  • 6
    looks like a bomb
    – AlexG
    Apr 3, 2017 at 14:06
  • @AlexG, I agree. Specially like those from Super Mario game.
    – Sigur
    Apr 3, 2017 at 14:16
  • But I like it anyway, +1
    – AlexG
    Apr 3, 2017 at 14:19
  • ooh a Bullet Bill or a Banzai Bill. :) Apr 4, 2017 at 22:02
28

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.
2
  • I like this fish best among the fish here. What a pity that it is not tikzed.
    – Epa
    Dec 2, 2018 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 3, 2018 at 0:05
23

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. :)

0
18

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

0
16
\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

1
  • 1
    +1. When the killer fish opens its mouth to the maximum it seems exaggerated :0.
    – manooooh
    Aug 1, 2018 at 0:33
7

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .