Adding Emoji to your LaTeX document

I found a rather quick way to get emoji in my document. But this is the brute force quick way. The russian way. It always works but is not that elegant. PDF-images.

How to

  1. Read this blog post „Emoji in LaTeX documents“
  2. Download the hires emoji-images in this github-repo
  3. Search the emoji-PDF files you need for your document
  4. Copy them to the folder where your .tex-document resides
  5. Define a shortcut/macro to include those emoji-PDF files you need
  6. Include the following code in your .tex-document
\usepackage{scalerel} % needed package to scale the pdf-images perfectly
\def\emojithumbup{\scalerel*{\includegraphics{emoji_thumbup_1F44D.pdf}}{O}}
\def\emojistar{\scalerel*{\includegraphics{emoji_star_2B50.pdf}}{0}}

In your document

This my five star rating
\emojistar\emojistar\emojistar\emojistar\emojistar
I would say \emojithumbup for this easy integration.

Update 17.09.2019

There is a quite interesting LaTeX Website called texample.net where you can see and learn lots of stuff about how to draw something in LaTeX. See following example:

Erreicht wurde das Ergebnis mit zwei Zusatzpaketen für TeX:

TikZ and PGF are TeX packages for creating graphics programmatically. TikZ is build on top of PGF and allows you to create sophisticated graphics in a rather intuitive and easy manner.

TikZ

Was ist TikZ? Nach dem Lesen der ersten Seiten des Manuals bin ich der Ansicht zumindest „T“ steht für Till Tantau den Entwickler. Und bei Wikipedia steht, es stehe für „TikZ ist kein Zeichneprogramm“. Das das eine Rekursion mit Henne-Ei-Problem ist scheint dem Entwickler egal.

With TikZ you get all the advantages of the “TEX-approach to typesetting” for your graphics:
quick creation of simple graphics, precise positioning, the use of macros, often superior typography. You also
inherit all the disadvantages: steep learning curve, no wysiwyg, small changes require a long recompilation
time, and the code does not really “show” how things will look like.
[…]
In practice, TikZ is the only “serious” frontend for pg

PGF

Was ist PGF? Jo, ich hab nach dem Überfliegen des Manuals (pgfmanual_3.0.1a) immer noch keine Ahnung wofür die Abkürzung steht. Typisch MathematikerInformatiker mal wieder.

It turns out that there are actually two layers below TikZ. […] most users will only use TikZ and almost no one will use the system layer directly […]

Why do I blog this? Because when I tried to integrate the coloremoji.sty class in my LaTeX document, I got a series of issues with conflicting textinput encodings not matching the one the coloremoji expects. This way your avoid any new encoding issues by directly integrating PDF-images which is what will happen anyway with that class. maybe you need to include \usepackage[pdftex]{graphicx} too.

Developing for tvOS using the Remote Layout Helper

I am developing an app for tvOS. One thing you quickly run into when testing on real world devices is the limits of screensize on several TV models. For this apple added a calibration tool in the settings.

I found I needed this info to actually make my UI layout work for customers. So I took a screenshot and created this screenimage as (PNG) to overlay it at any time in the dev-process for orientation of myself as a Remote Layout Helper).

tvOS Layout Template
Download the Overlay Image (use Save as…)

On my main controller I added & called following method which I call in - (void) viewDidAppear:(BOOL)animated:

- (void) activateCalibrationOverlay {
    if( DEBUG_CALIBRATION_OVERLAY ) {
        if( !overlayImageView ) {
            self.overlayImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tvOS_screen_size.png"]];
            overlayImageView.alpha = 0.0;
            overlayImageView.userInteractionEnabled = NO;
            [[self appDelegate].window addSubview:overlayImageView];
            [[self appDelegate].window bringSubviewToFront:overlayImageView];
            if( !overlayPlayPauseGesture ) {
                self.overlayPlayPauseGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleRemoteTapPlayPause:)];
                overlayPlayPauseGesture.allowedPressTypes = @[[NSNumber numberWithInteger:UIPressTypePlayPause]];
                [self.view addGestureRecognizer:overlayPlayPauseGesture];
            }
        }
    }
}

This adds an overlay of the Remote Layout Helper screen image on TOP of everything else and a gesture recognizer monitoring the PLAY/PAUSE-button of the TV remote. It calls following method:

-(void)handleRemoteTapPlayPause:(UIGestureRecognizer*)tapRecognizer {
    if( overlayImageView.alpha == 0.0f ) {
        [UIView animateWithDuration:0.3 animations:^{
            overlayImageView.alpha = 0.3;
        }];
        return;
    }
    if( overlayImageView.alpha == 0.3f ) {
        [UIView animateWithDuration:0.3 animations:^{
            overlayImageView.alpha = 0.5;
        }];
        return;
    }
    if( overlayImageView.alpha == 0.5f ) {
        [UIView animateWithDuration:0.3 animations:^{
            overlayImageView.alpha = 0.8;
        }];
        return;
    }
    if( overlayImageView.alpha == 0.8f ) {
        [UIView animateWithDuration:0.3 animations:^{
            overlayImageView.alpha = 1.0;
        }];
        return;
    }
    if( overlayImageView.alpha == 1.0f ) {
        [UIView animateWithDuration:0.3 animations:^{
            overlayImageView.alpha = 0.0;
        }];
        return;
    }
}

This helped me a lot doing the right things during development. I hope it helps you too. Feel free to share!

How to use it

You simply press PLAY/PAUSE again and again and the overlay will fade in at different alpha-blending-levels between 0.0 and 1.0. This allows to easily check boundaries of UI elements displayed against the screenlimits.

See following screen example:

The overlay in action on an app displayed.
The overlay in action on an app displayed.

Recognize, that you need a retained variable for the UIImageView called overlayImageView and another for the tap gesture recognizer called overlayPlayPauseGesture to be overlaid. And recognize that I use a boolean Precompiler-Flag named DEBUG_CALIBRATION_OVERLAY to switch this feature OFF in deployment.

Why do I blog this? I found it cumbersome to check against real world TV screens if my app works. So I just made sure that most of my UI is usable from within the MINIMUM SCREENSIZE frame the overlay gfx displays to me. Checking this anytime using the remote is a huge plus also on the real device. (Do not forget to disable the code on deployment!)

Challenge Power! (Konferenz am 10./11. März 2016, Berlin)

Ich hab ein wenig LIVE Stream Session 7: The future of OS (bei der taz) geguckt von dem Logan CIJ Symposium – btw CIJ steht für Centre for Investigative Journalism:

The Logan CIJ Symposium brings together a unique and powerful coalition of individuals with a single goal – the defence of freedom and democracy. Join us at our second gathering to be held in Berlin on March 11-12, 2016 at bcc (Berlin Congress Center).


Source: „Hacker-Kongress in Berlin: Challenge Power!“, taz

Ein paar Links zum selber lesen

From Session 8

Speaker Liste

Konferenzprogramm

Videoaufzeichnungen

Finden sich zum Teil bereits hier.

To be continued…

Why do I blog this? Angesichts dessen, dass das OS meines Rechners und meiner Geräte mehr oder weniger unter direktem Beschuss durch Regierungen steht (Snowden Erkenntnisse, Bundestrojaner, Apple vs. FBI, etc.) ist Selbstschutz und Bildung und Aufklärung erste Bürgerpflicht. Oder wie das Symposium betont: Our human rights are at risk. und If you care about the future of individual freedom and democracy – join them.