19

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.

10
  • 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, 2018 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. Jan 31, 2018 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. Jan 31, 2018 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, 2018 at 20:42
  • 1
    that's why I said to scale to 1ex (the height of an x) Jan 31, 2018 at 21:07

2 Answers 2

33

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 drawing commands in expl3.

\documentclass{article}
\usepackage{l3draw}

\ExplSyntaxOn
\NewDocumentCommand{\YES}{}
 {
  \mathord{\mathpalette{\nicoud_yesno:nn}{stroke}}
 }
\NewDocumentCommand{\NO}{}
 {
  \mathord{\mathpalette{\nicoud_yesno:nn}{fill}}
 }

\dim_new:N \l_nicoud_yesno_ht_dim

\cs_new_protected:Nn \nicoud_yesno:nn
 {% #1 = math style, #2 = stroke or fill the path
  \group_begin:
  \mkern 0.5mu
  \draw_begin:
  \draw_cap_round:
  \draw_join_round:
  \draw_linewidth:n { \nicoud_line_thickness:n { #1 } }
  \hbox_set:Nn \l_tmpa_box { $#1X$ }
  \dim_set:Nn \l_nicoud_yesno_ht_dim
   {% the height of X minus the line thickness
    \box_ht:N \l_tmpa_box - \nicoud_line_thickness:n { #1 }
   }
  % the top part
  \nicoud_path:n { #2 }
  % the bottom part
  \draw_path_moveto:n {0.35\l_nicoud_yesno_ht_dim,0.0\l_nicoud_yesno_ht_dim}
  \draw_path_lineto:n {0.35\l_nicoud_yesno_ht_dim,0.5\l_nicoud_yesno_ht_dim}
  \draw_path_use_clear:n { stroke }
  \draw_end:
  \mkern 0.5mu
  \group_end:
 }
\cs_new_protected:Nn \nicoud_path:n
 {
  \draw_path_moveto:n {0.1\l_nicoud_yesno_ht_dim,0.5\l_nicoud_yesno_ht_dim}
  \draw_path_lineto:n {0.1\l_nicoud_yesno_ht_dim,1.0\l_nicoud_yesno_ht_dim}
  \draw_path_lineto:n {0.6\l_nicoud_yesno_ht_dim,1.0\l_nicoud_yesno_ht_dim}
  \draw_path_lineto:n {0.6\l_nicoud_yesno_ht_dim,0.5\l_nicoud_yesno_ht_dim}
  \draw_path_close:
  \draw_path_use_clear:n { #1 }
 }
\cs_new:Nn \nicoud_line_thickness:n
 {
  \str_case:nn { #1 }
   {
    {\displaystyle}{\the\fontdimen8\textfont3}
    {\textstyle}{\the\fontdimen8\textfont3}
    {\scriptstyle}{\the\fontdimen8\scriptfont3}
    {\scriptscriptstyle}{\the\fontdimen8\scriptscriptfont3}
   }
 }
\ExplSyntaxOff

\begin{document}

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

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

\end{document}

enter image description here

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

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

2
  • Thanks, but this doesn't scale correctly when you put it as a subscript. Jan 31, 2018 at 21:11
  • 5
    @DanielRobert-Nicoud use \text{..the above definition} and \text from amsmath then it will scale. Jan 31, 2018 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.