17

I need to create two custom symbols for an article I am writing. The two symbols should have the same size as usual mathematical symbols, and should look like this:

(sorry for the small size). I would define them pixel by pixel, but I don't know how to do it, nor what the correct conventions are (like height/width depending if it is a normal equation, inline equation or sub/superscript). Could anyone help or explain how to do it?


The symbols \upspoon and \upfilledspoon in the MnSymbol package are close to what I want, but I'd prefer if they had little squares instead of little circles. Same thing for \upspoon and \upblackspoon in fdsymbol.

However, both those packages appear to interfere with the packages I already use for mathematical symbols.

  • 2
    See mirrors.ctan.org/info/symbols/comprehensive/symbols-a4.pdf for a extensive list of symbols, perhaps those symbols (markers?) do exist already... – user31729 Jan 31 '18 at 20:20
  • @ChristianHupfer I have already looked at a couple standard lists of common symbols and, honestly, even if such symbols were present in the document you linked I think it would be faster to define them from scratch than to go through the 338 pages... But thanks anyway for the reference. – Daniel Robert-Nicoud Jan 31 '18 at 20:24
  • 1
    if you have them as images then you can use \includegraphics[height=1ex]{image-a} or whatever size you want as you symbol. – David Carlisle Jan 31 '18 at 20:34
  • 1
    @DanielRobert-Nicoud: Drawing the symbols with TikZ is easy, but not the correct scaling with respect to the context where the symbol appears – user31729 Jan 31 '18 at 20:42
  • 1
    that's why I said to scale to 1ex (the height of an x) – David Carlisle Jan 31 '18 at 21:07
29

Picture mode!

\documentclass{article}
\usepackage{pict2e}

\makeatletter
\newcommand{\YES}{\mathord{\mathpalette\nicoud@YESNO\relax}}
\newcommand{\NO}{\mathord{\mathpalette\nicoud@YESNO{\nicoud@path{\fillpath}}}}
\newcommand{\nicoud@YESNO}[2]{%
  \begingroup
  \settoheight{\unitlength}{$#1X$}%
  \begin{picture}(0.7,1)
  \linethickness{\variable@rule{#1}}%
  \roundcap\roundjoin
  \nicoud@path{\strokepath}
  #2
  \Line(0.35,0)(0.35,0.5)
  \end{picture}%
  \endgroup
}
\newcommand{\nicoud@path}[1]{%
  \moveto(0.1,0.5)
  \lineto(0.1,1)\lineto(0.6,1)\lineto(0.6,0.5)
  \closepath
  #1
}
\newcommand{\variable@rule}[1]{%
  \fontdimen8  
  \ifx#1\displaystyle\textfont3\else
    \ifx#1\textstyle\textfont3\else
      \ifx#1\scriptstyle\scriptfont3\else
        \scriptscriptfont3\relax
  \fi\fi\fi
}
\makeatletter

\begin{document}

$\YES\NO_{\YES\NO}$

{\LARGE$\YES\NO_{\YES\NO}$}

\end{document}

enter image description here

Just for fun and learning, here's a version with the experimental drawing commands in expl3.

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\YES}{}
 {
  \mathord{\mathpalette{\nicoud_yesno:nn}{\driver_draw_stroke:}}
 }
\NewDocumentCommand{\NO}{}
 {
  \mathord{\mathpalette{\nicoud_yesno:nn}{\driver_draw_fillstroke:}}
 }

\dim_new:N \l_nicoud_yesno_ht_dim
\box_new:N \l_nicoud_yesno_box

\cs_new_protected:Nn \nicoud_yesno:nn
 {% #1 = math style, #2 = stroke or fill the path
  \group_begin:
  \hbox_set:Nn \l_tmpa_box { $#1X$ }
  \dim_set:Nn \l_nicoud_yesno_ht_dim { \box_ht:N \l_tmpa_box }
  \hbox_set:Nn \l_nicoud_yesno_box
   {
    \driver_draw_begin:
    \driver_draw_cap_round:
    \driver_draw_join_round:
    \driver_draw_linewidth:n { \nicoud_line_thickness:n { #1 } }
    \nicoud_path:n { #2 }
    \driver_draw_moveto:nn {0.35\l_nicoud_yesno_ht_dim}{0.0\l_nicoud_yesno_ht_dim}
    \driver_draw_lineto:nn {0.35\l_nicoud_yesno_ht_dim}{0.5\l_nicoud_yesno_ht_dim}
    \driver_draw_stroke:
    \driver_draw_end:
   }
  \box_set_wd:Nn \l_nicoud_yesno_box { 0.7\l_nicoud_yesno_ht_dim }
  \box_set_ht:Nn \l_nicoud_yesno_box { \l_nicoud_yesno_ht_dim }
  \box_use:N \l_nicoud_yesno_box
  \group_end:
 }
\cs_new_protected:Nn \nicoud_path:n
 {
  \driver_draw_moveto:nn {0.1\l_nicoud_yesno_ht_dim}{0.5\l_nicoud_yesno_ht_dim}
  \driver_draw_lineto:nn {0.1\l_nicoud_yesno_ht_dim}{1.0\l_nicoud_yesno_ht_dim}
  \driver_draw_lineto:nn {0.6\l_nicoud_yesno_ht_dim}{1.0\l_nicoud_yesno_ht_dim}
  \driver_draw_lineto:nn {0.6\l_nicoud_yesno_ht_dim}{0.5\l_nicoud_yesno_ht_dim}
  \driver_draw_closepath:
  #1
 }
\cs_new:Nn \nicoud_line_thickness:n
 {
  \str_case:nn { #1 }
   {
    {\displaystyle}{\fontdimen8\textfont3}
    {\textstyle}{\fontdimen8\textfont3}
    {\scriptstyle}{\fontdimen8\scriptfont3}
    {\scriptscriptstyle}{\fontdimen8\scriptscriptfont3}
   }
 }
\ExplSyntaxOff

\begin{document}

$\YES\NO_{\YES\NO}$

{\LARGE$\YES\NO_{\YES\NO}$}

\end{document}
  • 3
    You learning from a true master (+1) – David Carlisle Jan 31 '18 at 21:08
  • @DavidCarlisle Still not able to design airplanes with picture mode. – egreg Jan 31 '18 at 21:09
  • 1
    @Dr.ManuelKuehner Working on it! – egreg Jan 31 '18 at 22:14
  • 1
    @Dr.ManuelKuehner egreg aspires to be able to do things like this tex.stackexchange.com/a/114847/1090 – David Carlisle Jan 31 '18 at 22:14
  • @David Carlisle Ah, I see. I do not doubt egreg's capability to copy this plane :) – Dr. Manuel Kuehner Jan 31 '18 at 22:19
10

You can buid the symbols with tikz

\documentclass{article}    
\usepackage{tikz}      

\newcommand{\myclosedsymbol}{%      
\tikz[baseline]{\fill[draw] (0,0) -- ++(0,1ex) ++(-0.25ex,0) rectangle (0.25ex,1.5ex) }%  
}   


\newcommand{\myopensymbol}{%      
\tikz[baseline]{\draw (0,0) -- ++(0,1ex) ++(-0.25ex,0) rectangle (0.25ex,1.5ex) }%  
}

\begin{document}   

{\Huge $F  \myopensymbol $}   

{\normalsize $F \myopensymbol $}   

{\tiny $ F \myopensymbol $}   

{\Huge $F  \myclosedsymbol $}   

{\normalsize $F \myclosedsymbol $}   

{\tiny $ F \myclosedsymbol $}   


\end{document} 

enter image description here

  • Thanks, but this doesn't scale correctly when you put it as a subscript. – Daniel Robert-Nicoud Jan 31 '18 at 21:11
  • 5
    @DanielRobert-Nicoud use \text{..the above definition} and \text from amsmath then it will scale. – David Carlisle Jan 31 '18 at 21:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.