Using stacks, but in this case, I only lay a scaled black triangle atop of the underlying symbol. As presented below, my first MWE will not work in smaller math styles. If that is needed, see my 2nd MWE.
The symbols are designed to take up the same horizontal space as their underlying roots (i.e., \subseteq
and/or =
).
\documentclass{article}
\usepackage{amssymb,stackengine,graphicx}
\stackMath
\newcommand\frightarrow{\scalebox{.4}[.3]{$\blacktriangleright$}}
\newcommand\fleftarrow{\scalebox{.4}[.3]{$\blacktriangleleft$}}
\newcommand\subsetrleads{\mathrel{%
\stackengine{-1pt}{\subseteq}{\frightarrow}{U}{r}{F}{T}{S}}}
\newcommand\eqrleads{\mathrel{%
\stackengine{-2.4pt}{=}{\frightarrow}{U}{r}{F}{T}{S}}}
\newcommand\subsetlleads{\mathrel{%
\stackengine{-1pt}{\subseteq}{\fleftarrow}{U}{l}{F}{T}{S}}}
\newcommand\eqlleads{\mathrel{%
\stackengine{-2.4pt}{=}{\fleftarrow}{U}{l}{F}{T}{S}}}
\begin{document}
$A \subseteq B\subsetrleads C$
$A = B\eqrleads C$
$A \subseteq B\subsetlleads C$
$A = B\eqlleads C$
\end{document}
Here's a version that works across math styles:
\documentclass{article}
\usepackage{amssymb,stackengine,graphicx,scalerel}
\stackMath
\newcommand\frightarrow{\scalebox{.4}[.3]{$\SavedStyle\blacktriangleright$}}
\newcommand\fleftarrow{\scalebox{.4}[.3]{$\SavedStyle\blacktriangleleft$}}
\newcommand\subsetrleads{\mathrel{\ThisStyle{%
\stackengine{\dimexpr-.7\LMpt-.3pt}{\SavedStyle\subseteq}{\frightarrow}{U}{r}{F}{T}{S}}}}
\newcommand\eqrleads{\mathrel{\ThisStyle{%
\stackengine{\dimexpr-2.45\LMpt+0.05pt}{\SavedStyle=}{\frightarrow}{U}{r}{F}{T}{S}}}}
\newcommand\subsetlleads{\mathrel{\ThisStyle{%
\stackengine{\dimexpr-.7\LMpt-.3pt}{\SavedStyle\subseteq}{\fleftarrow}{U}{l}{F}{T}{S}}}}
\newcommand\eqlleads{\mathrel{\ThisStyle{%
\stackengine{\dimexpr-2.45\LMpt+0.05pt}{\SavedStyle=}{\fleftarrow}{U}{l}{F}{T}{S}}}}
\begin{document}
$A \subseteq B\subsetrleads C$
$A = B\eqrleads C$
$A \subseteq B\subsetlleads C$
$A = B\eqlleads C$
$\scriptstyle A \subseteq B\subsetrleads C$
$\scriptstyle A = B\eqrleads C$
$\scriptscriptstyle A \subseteq B\subsetlleads C$
$\scriptscriptstyle A = B\eqlleads C$
\end{document}
ADDENDUM
Based on an OP follow up, here is a version of the fixed-style version in which the arrow conforms exactly to the end of the horizontal stroke, rather than extending past it. It does this by clipping off the tip of the black triangle, and using the rounded end of the underlying stroke to serve as the arrow tip.
\documentclass{article}
\usepackage{amssymb,stackengine,graphicx,trimclip}
\stackMath
\newcommand\frightarrow{\scalebox{.4}[.3]{%
\clipbox{0pt 0pt 2pt 0pt}{$\blacktriangleright$}\kern1.8pt}}
\newcommand\fleftarrow{\scalebox{.4}[.3]{%
\kern1.8pt\clipbox{2pt 0pt 0pt 0pt}{$\blacktriangleleft$}}}
\newcommand\subsetrleads{\mathrel{%
\stackengine{-1.1pt}{\subseteq}{\frightarrow\kern.3pt}{U}{r}{F}{T}{S}}}
\newcommand\eqrleads{\mathrel{%
\stackengine{-2.43pt}{=}{\frightarrow}{U}{r}{F}{T}{S}}}
\newcommand\subsetlleads{\mathrel{%
\stackengine{-1.1pt}{\subseteq}{\kern.4pt\fleftarrow}{U}{l}{F}{T}{S}}}
\newcommand\eqlleads{\mathrel{%
\stackengine{-2.43pt}{=}{\fleftarrow}{U}{l}{F}{T}{S}}}
\begin{document}
$A \subseteq B\subsetrleads C$
$A = B\eqrleads C$
$A \subseteq B\subsetlleads C$
$A = B\eqlleads C$
\end{document}
Best Answer
For many symbols it’s just that the purpose is different. Consider the set minus: what you want there isn’t a backslash. You really want a “set minus” – which just happens to be displayed (sometimes) identically to a backslash. But it’s still fundamentally different.
Now, which of the two LaTeX codes is more readable:
If the two are really identical (which I don’t believe since as Carsten points out there’s always the issue of spacing in math mode) one can simply be defined in terms of the other – e.g.:
No harm in that. This still makes the usage more readable (see above) and the macro can be exchanged very quickly if you decide that the symbol should be displayed differently. For example, consider that the set minus is actually often written like a normal minus instead of like a backslash. If you have used the
\backslash
command, you now need to change all occurrences of that in your document.If you have used a dedicated command then you only need to redefine that:
In practice, I redefine aliases for almost all macros that I use to fit my current use-case.