%#!xelatex
\documentclass[a4paper]{article}
\usepackage[scale=0.75]{geometry}
\usepackage{fontspec}
\usepackage{xcolor}
\definecolor{myblue}{rgb}{0,0,0.75}
\definecolor{mygreen}{rgb}{0,0.45,0}
\usepackage[colorlinks,
  plainpages, % avoid problems on coloremojikeycap numbering
  hyperfootnotes=false]{hyperref}
\hypersetup{linkcolor=myblue,urlcolor=mygreen,
  pdftitle={The bxcoloremoji Package},
  pdfauthor={Takayuki YATO}}
\usepackage{bxtexlogo}
\bxtexlogoimport{*,TL-e}
\usepackage{shortvrb,alltt}
\MakeShortVerb{\|}
\usepackage[twemojis]{bxcoloremoji}
\newcommand{\CE}[1]{\coloremoji{#1}}
\newcommand{\CC}[1]{\coloremojicode{#1}}
\newcommand{\PkgVersion}{1.0a}
\newcommand{\PkgDate}{2024/11/18}
\newcommand{\Pkg}[1]{\textsf{#1}}
\newcommand{\Meta}[1]{$\langle$\textit{#1}$\rangle$}
\newcommand{\RMeta}[1]{{\rmfamily\Meta{#1}}}
\newcommand{\Note}{\par\noindent\emph{Note:}\quad}
\newcommand{\Means}{~:\quad}
\newcommand{\wbr}{\linebreak[0]}
\newcommand{\nobr}{\nolinebreak[4]}
\newcommand{\／}{\mbox{}／\mbox{}}
\newcommand{\EG}[1]{#1}
\newcommand{\cs}[1]{\symbol{`\\}#1}
\newcommand{\Ie}{i.\,e.}
\newcommand{\Eg}{e.\,g.}
\providecommand{\Strong}[1]{\strong}
\pagenumbering{coloremojikeycap}% ;-)
%% tentative
\newfontfamily{\fJa}{Source Han Serif}
\newcommand*{\JAJA}{%
\fJa
\XeTeXlinebreaklocale "ja"\relax
\XeTeXlinebreakskip=0pt plus 1pt minus 0.1pt\relax
\XeTeXlinebreakpenalty=0\relax
}
%-----------------------------------------------------------
\begin{document}
\title{Thge \Pkg{bxcoloremoji} Package}
\author{Takayuki YATO\quad (aka.~``ZR'')}
\date{v\PkgVersion \quad[\PkgDate]}
\maketitle

\begin{abstract}

The \Pkg{bxcoloremoji} package lets users output color emojis
in {\LaTeX} documents.
Compared to other packages with similar functionality,
this package has the following merits:
\begin{itemize}
\item It supports all major {\LaTeX} engines.
\item Emojis can be entered as the characters themselves,
  as their Unicode code values, or as their short names.
\item It works reasonably well in PDF strings when using \Pkg{hyperref}.
\item Emojis can be handled properly even
  in Japanese typesetting environments.
\end{itemize}

This package has been widely used among the Japanese {\LaTeX} community,
but there are already many emoji packages on CTAN and {\TeX}~Live.
To avoid uploading a large amount of emoji image data
that are essentially identical,
the package was revised in version 1.0
so that the image output was delegated to the \Pkg{twmojis} package.
Therefore, this package now contains no image data.

Nevertheless, this package also supports
the use of custom image sets (\emph{custom families})
prepared by the user for output.
\end{abstract}

\tableofcontents


%===========================================================
\section{System Requirements}
\label{sec:Prerequisites}

\begin{itemize}
\item {\TeX} format\Means {\LaTeX}
\item {\TeX} engine\Means Anything that supports the {\eTeX} extension.
\item Dependent packages\Means
  \begin{itemize}
  \item \Pkg{etoolbox}
  \item \Pkg{binhex} (when expl3 is not available)
  \item \Pkg{bxghost} (optionally)
  \item \Pkg{twemojis}
  \end{itemize}
\end{itemize}

\emph{Important note:}
This English documentation omits much of the information
that is specific to Japanese typesetting
and/or Japanese engines (\Ie {(u)\pLaTeX}).


%===========================================================
\section{Package loading}
\label{sec:Loading}

For older (prior to 2018-04-01) {\pdfLaTeX},
you need to enable |utf8| input encoding.

\begin{quote}\small\begin{verbatim}
\usepackage[utf8]{inputenc}% for old systems
\end{verbatim}\end{quote}

Then load the \Pkg{bxcoloremoji} package.

\begin{quote}\small\begin{alltt}
\cs{usepackage}[\RMeta{option},…]\{bxcoloremoji\}
\end{alltt}\end{quote}

\Note For DVI output, you need to specify a global driver option.
\begin{quote}\small\begin{verbatim}
\usepackage[dvipdfmx,a4paper]{article}% for dvipdfmx
\end{verbatim}\end{quote}

%----------
\subsection{Package Options}

The available options are as follows:

\begin{itemize}
\item \strong{Configuration parameters}\Means
The configuration parameters listed in Section~\ref{sec:Parameters}
(\Eg |size|, |scale|, etc.)
can also be specified as package options.

\item |names=|\Meta{bool}\Means
  Whether to load the short name database.
  \Note If |false| is specified, only special short names
  (see Section~\ref{sec:Short-Names}) can be used.
\end{itemize}

The following are for advanced users:

\begin{itemize}
\item |nodvidriver|\Means
  Suppresses driver-dependent behavior.
  Specifically, the emoji image set type is fixed to |no-image|
  (emojis are not displayed).

\item |resetdvidriver|\Means
  The negation of |nodvidriver|.

\item |preload-names=|\Meta{value}\Means
  Whether to load the short name database at once
  when loading the package.
  \Note Here |false| is a setting for the old {\TeX} engine
  with low memory capacity.
  \begin{itemize}
  \item |auto| (default)\Means
    If \emph{any} of the following conditions are met
    then |true| is used
    (assuming there is enough memory),
    otherwise |false| is used.
    \begin{itemize}
    \item The engine is either {\XeLaTeX} or {\LuaLaTeX}.
    \item expl3 is enabled.
    \item \Pkg{hyperref} is loaded.
    \end{itemize}
  \item |true|\Means
    Loads all data when loading the package.
  \item |false|\Means
    Loads on demand.
  \end{itemize}

\item |bbparam=|\Meta{value}\Means
  Whether to specify the |bb| parameter for |\includegraphics|
  for emoji output.
  \begin{itemize}
  \item |auto| (default)\Means
    Specifies |bb| only if the \Pkg{graphicx} driver is dvipdfmx.
    \Note When using dvipdfmx,
    specifying |bb| will make the build faster.
  \item |true|/|false|\Means
    Always/never specifies |bb|.
    \Note Some drivers prohibit the |bb| setting.
  \end{itemize}
\end{itemize}


%===========================================================
\section{Configuration Parameters}
\label{sec:Parameters}

Configuration parameters can be used in the following places:

\begin{itemize}
\item To specify them as package options.
\begin{quote}\small\begin{verbatim}
\usepackage[scale=2]{bxcoloremoji}
\end{verbatim}\end{quote}
\item To specify them as arguments to the |\coloremojisetup| command.
  The settings are changed on the spot
  and applied to subsequent emoji output commands.
\begin{quote}\small\begin{verbatim}
\coloremojisetup{scale=2}
\end{verbatim}\end{quote}
\item To specify as the first optional argument
  to an emoji output command.
  The setting is applied only to that emoji output.
\begin{quote}\small\begin{alltt}
\cs{coloremoji}[scale=2]\{\CE{☃}\}
\end{alltt}\end{quote}
\end{itemize}

The available configuration parameters are as follows:

\begin{itemize}
\item \strong{The type of emoji image set.}
  (default: |twemojis|%
  \footnote{The default value has been changed to |twemojis|
    since version 1.0.
    In addition, |twitter|, |hires| and |lowres|,
    which were deprecated since version 0.12,
    have been \emph{abolished}.})
  \begin{itemize}
  \item |twemojis|\Means
    Delegates image output to the command of the \Pkg{twemojis} package
    (the twemojis mode).
  \item |family=|\Meta{name}\Means
    Uses a custom family.
  \item |no-image|\Means
    Uses fallback output only without using any emoji images.
  \end{itemize}

\item |size=|\Meta{length}\Means
  The size of emojis. (default: 1\,em)

\item |scale=|\Meta{real}\Means
  Changes the size of emojis by the given factor
  from |size|.
  (default: 1)
\end{itemize}



%===========================================================
\section{Usage}
\label{sec:Usage}

\Note For commands in this package,
braces around mandatory arguments \emph{cannot} be omitted.

%--------
\subsection{Basic Emoji Commands}

\begin{itemize}
\item |\coloremojisetup{|\Meta{parameters}|}|\Means
  Changes the parameter settings (see Section 3).
  \Note Here \Meta{parameters} represents a list of the form
  “\Meta{key}|=|\Meta{value}|,…|”.
  The same applies below.
\item |\coloremoji[|\Meta{parameters}|]{|\Meta{string}|}|\Means
  Outputs the argument string as color emojis.
  However, if it cannot be output as emojis
  because the target image is missing,
  it will fall back to normal text output.
  \newcommand*{\ExAA}{\coloremoji{🍣3️⃣🙃☃}}
\begin{quote}\small\begin{alltt}
\cs{coloremoji}\{\ExAA\}%Output:\ExAA
\end{alltt}\end{quote}

\item |\coloremojicode[|\Meta{parameters}|]{|%
\Meta{code value list}|}|\Means
  Outputs color emojis for the characters
  input as Unicode code values
  or short names defined in the JoyPixels emoji-toolkit library.%
  \footnote{The emoji-toolkit library:
    \url{https://github.com/joypixels/emoji-toolkit}}
  A code value is represented by the hexadecimal notation,
  and a short name is represented by a string
  of the format “|:|\Meta{short-name}|:|”.
  When multiple characters are entered,
  each character must be delimited with a space.
  \newcommand*{\ExAB}{%
    \coloremojicode{:sushi: 23 FE0F 20E3 1F643 :snowman:}}
\begin{quote}\small\begin{alltt}
\cs{coloremojicode}\{:sushi: 23 20E3 1F643 :snowman:\}%Output:\ExAB
\end{alltt}\end{quote}
  \Note Hereafter, this input method will be called
  \emph{code value list}.

\item |\coloremojiucs[|\Meta{parameters}|]{|%
\Meta{code value list}|}|\Means
  An alias for |\coloremojicode| in the old version.
  \Note For other commands and environments with the name
  |coloremojicode…|,
  those that existed before version 0.4
  have the alias |coloremojiucs…| similarly.
\end{itemize}

%--------
\subsection{The counter output command for outputting keycap emojis}

The following commands are provided
to output an integer value between 0 and 10
as the keycap emoji (\CE{0️⃣}--\CE{🔟})
that corresponds to the value.
\Note If the input value is out of range,
a fallback output will be used.

\begin{itemize}
\item |\coloremojikeycapof[|\Meta{parameters}|]{|\Meta{number}|}|\Means
  Outputs the keycap emoji corresponding to the given number.
  \newcommand*{\ExBA}{\coloremojikeycapof{8}}
\begin{quote}\small\begin{alltt}
\cs{coloremojikeycapof}\{8\}%Output:\ExBA
\end{alltt}\end{quote}

\item |\coloremojikeycap[|\Meta{parameters}|]{|%
\Meta{counter name}|}|\Means
  Outputs the keycap emoji corresponding to the current value
  of the given counter.

\item |\pagenumbering{coloremojikeycap}|\Means
  Changes the page number format to keycap emoji.
  \Note |\pagenumbering{coloremojikeycap}| is employed
  in this document.
\end{itemize}

%--------
\subsection{Features similar to the \Pkg{pifont} package}

The following commands are provided,
which are the emoji versions of the \Pkg{pifont} package features
(such as the |\dingfill| command and the |dingautolist| environment).
\Note The commands and environments listed here
cannot have parameter options.

\begin{coloremojiautolist}{1️⃣}
\item |\coloremojifill{|\Meta{string}|}|\Means
  A filler command (like |\dotfill|)
  that fills a line by arranging multiple outputs of
  |\coloremoji{|\Meta{string}|}|.

\item |\coloremojiline{|\Meta{string}|}|\Means
  Outputs a decorative border using emojis.
  That is, it outputs a separate line containing
  only the output of |\coloremojifill{|\Meta{string}|}|
  (but with some space on both ends).

\item |\begin{coloremojilist}{|\Meta{string}|}|\ldots
  |\end{coloremojilist}|\Means
  Outputs a bulleted list with the output
  of |\coloremoji{|\Meta{string}|}| as item label.

\item |\begin{coloremojiautolist}{|\Meta{string}|}|\ldots
  |\end{coloremojiautolist}|\Means
  This is also an environment
  that outputs a bulleted list with emojis as item label,
  but the argument must be one of the emojis
  in one of the “emoji orders”.
  It determines the label according to the emoji order
  starting from that character.

  For example,
  in the list created by |\begin{coloremojiautolist}{|\CE{♠}|}|
  the first label is “\CE{♠️}”,
  and the subsequent labels go
  “\CE{♥️}”, “\CE{♦️}”, and “\CE{♣️}”.
  \Note The list you see now is generated by
  |\begin{coloremojiautolist}{|\CE{1️⃣}|}|.

\item For the commands and environments mentioned above,
  there are also versions that use a code value list as an argument.
  \begin{coloremojilist}{✏}
  \item |\coloremojicodefill{|\Meta{code value list}|}|
  \item |\coloremojicodeline{|\Meta{code value list}|}|
  \item |\begin{coloremojicodelist}{|\Meta{code value list}|}|
  \item |\begin{coloremojicodeautolist}{|\Meta{code value list}|}|
  \end{coloremojilist}
\end{coloremojiautolist}

Currently, the following “emoji orders” are defined.

\begin{itemize}
\item
  \CE{♈️}→\CE{♉️}→\CE{♊️}→\CE{♋️}→\CE{♌️}→\CE{♍️}→\CE{♎️}→\CE{♏️}→\CE{♐️}→\CE{♑️}→\CE{♒️}→\CE{♓️}
\item
  \CE{♠️}→\CE{♥️}→\CE{♦️}→\CE{♣️}
\item
  \CE{🕐️}→\CE{🕑️}→\CE{🕒️}→\CE{🕓️}→\CE{🕔️}→\CE{🕕️}→\CE{🕖️}→\CE{🕗️}→\CE{🕘️}→\CE{🕙️}→\CE{🕚️}→\CE{🕛️}
\item
  \CE{0️⃣}→\CE{1️⃣}→\CE{2️⃣}→\CE{3️⃣}→\CE{4️⃣}→\CE{5️⃣}→\CE{6️⃣}→\CE{7️⃣}→\CE{8️⃣}→\CE{9️⃣}→\CE{🔟}
\end{itemize}


%===========================================================
\section{“Short Names” for Emojis}
\label{sec:Short-Names}

For the short names used in code value lists,
those declared in the emoji-toolkit library
of JoyPixels (formerly known as EmojiOne) are available.
In addition, the \emph{special short names}
listed in Table~\ref{tbl:special-names} can also be used.

\newcommand*{\cTC}{\multicolumn{2}{l}}
\begin{table}[!t]
\centering\small
\caption{The list of special short names.}\label{tbl:special-names}
\begin{tabular}{@{\quad}llll@{\quad}}
\hline
|+|       & U+200D  & &(ZWJ)\\
|/1|      & U+1F3FB &\CE{🏻}&(light skin tone modifier)\\
|/2|      & U+1F3FC &\CE{🏼}&(medium-light skin tone modifier)\\
|/3|      & U+1F3FD &\CE{🏽}&(medium skin tone modifier)\\
|/4|      & U+1F3FE &\CE{🏾}&(medium-dark skin tone modifier)\\
|/5|      & U+1F3FF &\CE{🏿}&(dark skin tone modifier)\\
|!/red|   & U+1F9B0 &\CE{🦰}&(“|+ !/red|”forms a hair style)\\
|!/curly| & U+1F9B1 &\CE{🦱}&(“|+ !/curly|”forms a hair style)\\
|!/bald|  & U+1F9B2 &\CE{🦲}&(“|+ !/bald|”forms a hair style)\\
|!/white| & U+1F9B3 &\CE{🦳}&(“|+ !/white|”forms a hair style)\\
|!black|  & U+2B1B  &\CE{⬛}&(“|+ !black|”forms a color indicator)\\
|!white|  & U+2B1C  &\CE{⬜}&(“|+ !white|”forms a color indicator)\\
|!red|    & U+1F7E5 &\CE{🟥}&(“|+ !red|”forms a color indicator)\\
|!blue|   & U+1F7E6 &\CE{🟦}&(“|+ !blue|”forms a color indicator)\\
|!orange| & U+1F7E7 &\CE{🟧}&(“|+ !orange|”forms a color indicator)\\
|!yellow| & U+1F7E8 &\CE{🟨}&(“|+ !yellow|”forms a color indicator)\\
|!green|  & U+1F7E9 &\CE{🟩}&(“|+ !green|”forms a color indicator)\\
|!purple| & U+1F7EA &\CE{🟪}&(“|+ !purple|”forms a color indicator)\\
|!brown|  & U+1F7EB &\CE{🟫}&(“|+ !brown|”forms a color indicator)\\
|!female| & U+2640  &\CE{♀}&(“|+ !female|”forms a gender indicator)\\
|!male|   & U+2642  &\CE{♂}&(“|+ !male|”forms a gender indicator)\\
|!flag|   & U+1F3F4 &\CE{🏴}&(the base of tag sequence for flags)\\
|!<|      & U+2B05  &\CE{⬅}&(“|+ !<|”forms a direction indicator)\\
|!>|      & U+27A1  &\CE{➡}&(“|+ !>|”forms a direction indicator)\\
|!A|–|!Z| &\cTC{U+1F1E6–1F1FF}&(flag sequence components)\\
|@|       & U+E007F & &(the tag sequence terminator)\\
|@0|–|@9| &\cTC{U+E0030–E0039}&(tag sequence components)\\
|@a|–|@z| &\cTC{U+E0061–E007A}&(tag sequence components)\\
\hline
\end{tabular}
\end{table}

\Note For special short names, the |:…:| surrounding the name
can be omitted.
\Note For short names other than special short names,
the current behavior is
that the |:…:| can be omitted
if it cannot be interpreted as a hexadecimal notation of an integer,
but this may change in the future.

Examples\Means
\newcommand*{\ExA}{\CC{:man: + :woman: + :girl: + :girl:}}
\newcommand*{\ExB}{\CC{!flag @g @b @w @l @s @}}
\newcommand*{\ExC}{\CC{1F647 + !male}}
\begin{quote}\small\begin{alltt}
\cs{coloremojicode}\{:man: + :woman: + :girl: + :girl:\}%Output:\ExA
\cs{coloremojicode}\{!flag @g @b @w @l @s @\}%Output:\ExB
\cs{coloremojicode}\{1F647 + !male\}%Output:\ExC
\end{alltt}\end{quote}


%===========================================================
\section{Using emojis in PDF strings}
\label{sec:PDF-Strings}

You can use commands for outputting emojis
in the document information string
(hereafter called \emph{PDF string})
when using the \Pkg{hyperref} package.
For example,
when you include |\coloremoji| in the argument of |\section|,
it will be output as an emoji (image) on the page,
and will be displayed as text in the PDF bookmark.

However,
this is subject to the premise
that Unicode characters in PDF strings are properly processed.
Namely, the following condition must be satisfied.

\Note Nothing is required for {\TeX}~Live 2022 or later
(unless you are using {(u)\pLaTeX}).

\begin{itemize}
\item 
  The “PDF encoding” of the \Pkg{hyperref} package is Unicode.

  This is the default in recent versions of \Pkg{hyperref}
  (version 7.00g and later).
  In older versions, you need to add the |unicode| option
  when loading \Pkg{hyperref}.
\begin{quote}\small\begin{verbatim}
\usepackage[unicode]{hyperref}
\end{verbatim}\end{quote}
\end{itemize}


%===========================================================
\end{document}
%% EOF
