Search code examples
unicodelatexpdflatex

Package inputenc Error: Unicode character 하 (U+D558) (inputenc) not set up for use with LaTeX. (Automating Unicode Input)


I have read all the related answers around this issue and for most people using \DeclareUnicodeCharacter{}{} works for them. However, I'm generating my TEX file from an input file and I don't know the Unicode characters/words which I'm going to be given in advance, so it would be difficult to use the DeclareUnicodeCharacter declaration.

I'm using pdflatex which some StackExchange answers said wouldn't be as useful for Unicode characters, so I also tried xetex and luatex, but these didn't output as expected. Any suggestions how I could modify my script to output a tex file so that pdflatex will not barf on the Unicode characters? Or one which would be acceptable to xetex or luatex?

I've done simple pdflatex stuff but never used Unicode before.

I'm attempting to modify a script I found on github which generates bingo cards. The original program only dealt with English words in the "squares" input file.

I've added one line to the script in order to get it to see Unicode.

\usepackage[utf8]{inputenc}

the bash script:

#!/usr/bin/bash

## text file which contains bingo squares
input_text=squares

## latex code for center square
center_square='\includegraphics[width=0.9\textwidth]{center.png}'
#center_square=FREE


node=( AA AB AC AD AE BA BB BC BD BE CA CB CD CE DA DB DC DD DE EA EB EC ED EE )

cat > bingo.tex << EOF
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{xstring}
\usepackage[none]{hyphenat}
\usepackage{tikz}
\usetikzlibrary{calc}
\renewcommand{\familydefault}{\sfdefault}

\newcommand{\Size}{3cm}% Adjust size of square as desired

\def\NumOfColumns{5}%
\def\Sequence{1/A, 2/B, 3/C, 4/D, 5/E}% This needs to match \NumOfColumns 

\tikzset{Square/.style={
    inner sep=0pt,
    text width=\Size, 
    minimum size=\Size,
    draw=black,
    align=center
    }
}
EOF

i=0
OLDIFS=$IFS
IFS=$'\n'
for line in $(sort -R $input_text | head -n 24)
do
    echo "\newcommand{\Node${node[i]}}{$line}%" >> bingo.tex
    (( i++ ))
done
IFS=$OLDIFS

echo "\newcommand{\NodeCC}{$center_square}%" >> bingo.tex

cat >> bingo.tex << EOF
\pagestyle{empty}

\begin{document}
\centering
% Optional Title
\vspace*{\fill}
    \begin{center}
        \begin{tikzpicture}[draw=black, ultra thick, x=\Size,y=\Size]
            \node at (0.5,-0.8) {\Huge B};
            \node at (1.5,-0.8) {\Huge I};
            \node at (2.5,-0.8) {\Huge N};
            \node at (3.5,-0.8) {\Huge G};
            \node at (4.5,-0.8) {\Huge O};
            \foreach \col/\colLetter in \Sequence {%
                \foreach \row/\rowLetter in \Sequence{%
                    \pgfmathtruncatemacro{\value}{\col+\NumOfColumns*(\row-1)}
                    \def\NodeText{\expandafter\csname Node\rowLetter\colLetter\endcsname}
                    \node [Square] at (\$(\col,-\row)-(0.5,0.5)\$) {\NodeText};
                }
            }
        \end{tikzpicture}
    \end{center}
\vspace*{\fill}
\end{document}
EOF

pdflatex bingo.tex
#luatex bingo.tex
#xetex bingo.tex

which generates the following bingo.tex file:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{xstring}
\usepackage[none]{hyphenat}
\usepackage{tikz}
\usetikzlibrary{calc}
\renewcommand{\familydefault}{\sfdefault}

\newcommand{\Size}{3cm}% Adjust size of square as desired

\def\NumOfColumns{5}%
\def\Sequence{1/A, 2/B, 3/C, 4/D, 5/E}% This needs to match \NumOfColumns 

\tikzset{Square/.style={
    inner sep=0pt,
    text width=\Size, 
    minimum size=\Size,
    draw=black,
    align=center
    }
}
\newcommand{\NodeAA}{주다}%
\newcommand{\NodeAB}{되다}%
\newcommand{\NodeAC}{않다}%
\newcommand{\NodeAD}{것}%
\newcommand{\NodeAE}{보다}%
\newcommand{\NodeBA}{사람}%
\newcommand{\NodeBB}{거}%
\newcommand{\NodeBC}{없다}%
\newcommand{\NodeBD}{나}%
\newcommand{\NodeBE}{아니다}%
\newcommand{\NodeCA}{하다}%
\newcommand{\NodeCB}{그}%
\newcommand{\NodeCD}{수}%
\newcommand{\NodeCE}{이}%
\newcommand{\NodeDA}{있다}%
\newcommand{\NodeDB}{때}%
\newcommand{\NodeDC}{가다}%
\newcommand{\NodeDD}{우리}%
\newcommand{\NodeDE}{같다}%
\newcommand{\NodeCC}{\includegraphics[width=0.9\textwidth]{center.png}}%
\pagestyle{empty}

\begin{document}
\centering
% Optional Title
\vspace*{\fill}
    \begin{center}
        \begin{tikzpicture}[draw=black, ultra thick, x=\Size,y=\Size]
            \node at (0.5,-0.8) {\Huge B};
            \node at (1.5,-0.8) {\Huge I};
            \node at (2.5,-0.8) {\Huge N};
            \node at (3.5,-0.8) {\Huge G};
            \node at (4.5,-0.8) {\Huge O};
            \foreach \col/\colLetter in \Sequence {%
                \foreach \row/\rowLetter in \Sequence{%
                    \pgfmathtruncatemacro{\value}{\col+\NumOfColumns*(\row-1)}
                    \def\NodeText{\expandafter\csname Node\rowLetter\colLetter\endcsname}
                    \node [Square] at ($(\col,-\row)-(0.5,0.5)$) {\NodeText};
                }
            }
        \end{tikzpicture}
    \end{center}
\vspace*{\fill}
\end{document}

You can see it output:

\newcommand{\NodeAA}{주다}%

as unicode to be input into the square, but pdflatex doesn't like it.


Solution

  • If you compile with lualatex or xelatex, you'll just have to find a font which has all your glyphs. In the example below, I'm using Arial Unicode MS.

    To see which fonts you can use for your glyphes, you can use the command line tool albatross, see https://stackoverflow.com/a/69721465/2777074 for an example how to use it.

    % !TeX TS-program = lualatex 
    
    \documentclass{article}
    \usepackage[utf8]{inputenc}
    \usepackage[a4paper,margin=2cm]{geometry}
    \usepackage{xstring}
    \usepackage[none]{hyphenat}
    \usepackage{tikz}
    \usetikzlibrary{calc}
    \renewcommand{\familydefault}{\sfdefault}
    
    \newcommand{\Size}{3cm}% Adjust size of square as desired
    
    \def\NumOfColumns{5}%
    \def\Sequence{1/A, 2/B, 3/C, 4/D, 5/E}% This needs to match \NumOfColumns 
    
    \tikzset{Square/.style={
        inner sep=0pt,
        text width=\Size, 
        minimum size=\Size,
        draw=black,
        align=center
        }
    }
    \newcommand{\NodeAA}{주다}%
    \newcommand{\NodeAB}{되다}%
    \newcommand{\NodeAC}{않다}%
    \newcommand{\NodeAD}{것}%
    \newcommand{\NodeAE}{보다}%
    \newcommand{\NodeBA}{사람}%
    \newcommand{\NodeBB}{거}%
    \newcommand{\NodeBC}{없다}%
    \newcommand{\NodeBD}{나}%
    \newcommand{\NodeBE}{아니다}%
    \newcommand{\NodeCA}{하다}%
    \newcommand{\NodeCB}{그}%
    \newcommand{\NodeCD}{수}%
    \newcommand{\NodeCE}{이}%
    \newcommand{\NodeDA}{있다}%
    \newcommand{\NodeDB}{때}%
    \newcommand{\NodeDC}{가다}%
    \newcommand{\NodeDD}{우리}%
    \newcommand{\NodeDE}{같다}%
    \newcommand{\NodeCC}{\includegraphics[width=0.9\textwidth]{example-image-duck}}%
    \pagestyle{empty}
    
    \usepackage{fontspec}
    \setsansfont{Arial Unicode MS}
    
    \begin{document}
    \centering
    % Optional Title
    \vspace*{\fill}
        \begin{center}
            \begin{tikzpicture}[draw=black, ultra thick, x=\Size,y=\Size]
                \node at (0.5,-0.8) {\Huge B};
                \node at (1.5,-0.8) {\Huge I};
                \node at (2.5,-0.8) {\Huge N};
                \node at (3.5,-0.8) {\Huge G};
                \node at (4.5,-0.8) {\Huge O};
                \foreach \col/\colLetter in \Sequence {%
                    \foreach \row/\rowLetter in \Sequence{%
                        \pgfmathtruncatemacro{\value}{\col+\NumOfColumns*(\row-1)}
                        \def\NodeText{\expandafter\csname Node\rowLetter\colLetter\endcsname}
                        \node [Square] at ($(\col,-\row)-(0.5,0.5)$) {\NodeText};
                    }
                }
            \end{tikzpicture}
        \end{center}
    \vspace*{\fill}
    \end{document}
    

    enter image description here