Usando TikZ para representar el nivel de tono

Usando TikZ para representar el nivel de tono

Tras el resultado muy productivo de mi reciente pregunta sobreentonación, Me animo a hacer una pregunta relacionada. En el anterior, se conectan niveles de tono particulares para producir un contorno de entonación, pero para los lenguajes tonales (donde cada sílaba de una palabra generalmente tiene un tono particular asociado, se necesita un enfoque diferente, donde los niveles de tono se indican mediante pequeñas líneas horizontales). Tengo un par de enfoques para esto que ya funcionan, y ahora he creado uno nuevo en TikZ basado en el enfoque de Matthew Leingang a la pregunta anterior, pero estoy seguro de que es posible realizar mejoras. Las opciones se establecen en el MWE a continuación. , utilizando ejemplos del kiKongo, una lengua bantú africana.

%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode

\documentclass{article}

\usepackage{fontspec}
\defaultfontfeatures{Mapping=tex-text, Scale=MatchLowercase}
\setmainfont{Charis SIL}

\usepackage{tikz}
\usetikzlibrary{backgrounds}
\newcommand{\tikzpitch}[1]{\tikz[overlay, remember picture, baseline] \coordinate (#1);}%
\tikzstyle{pitchlevel}=[x=1mm, y=1mm, yshift=-7mm, semithick]

% Charis SIL pitchlevel glyphs
\newcommand \pitch[1]{\char"F1F#1}  % use \pitch1..9 to generate the 9 pitch-level marks fromthe glyphs F1F{1..9}

% John Frampton's pitchlevels code
\usepackage{pstricks}
\newdimen\dimpla
\newdimen\dimplb
\newdimen\dimplc
\def\1{\contourpitch{-2.5ex}{-2.5ex}}
\def\2{\contourpitch{-2.1ex}{-2.1ex}}
\def\3{\contourpitch{-1.7ex}{-1.7ex}}
\def\4{\contourpitch{-1.3ex}{-1.3ex}}
\def\5{\contourpitch{-.9ex}{-.9ex}}
\def\6{\contourpitch{-.5ex}{-.5ex}}
% level pitches
\def\contourpitch #1#2#3{\setbox0=\hbox{#3}\dimpla=.5\wd0 \dimplb=.5\wd0
\advance\dimpla by -.25em
\advance\dimplb by .25em
\dimplc=#1
\ifdim#2<#1 \dimplc=#2 \fi
\dimplc=-\dimplc
\advance\dimplc by 1ex
\psline(\dimpla,#1)(\dimplb,#2)
\vrule width0pt depth\the\dimplc #3}
% glides
\def\pitchup{\contourpitch{-2.5ex}{-1.7ex}}
\def\pitchdown{\contourpitch{-1.7ex}{-2.5ex}}
\def\steepup{\contourpitch{-2.5ex}{-.5ex}}

% format fbox
\setlength\fboxsep{1pt}


\begin{document}

% generate glides in Charis SIL
\fontspec[Renderer=Graphite]{Charis SIL}

\section{Pitchlevel marking using xelatex}

In Africanist linguistics, pitchlevel marks are often used so that the pitches can be discussed without drawing premature conclusions as to how these pitches should be represented in the eventual tone-marking.

\subsection{Word-side (inline) marking}

The example of \textbf{ibuuna [~\pitch1\, \pitch9\pitch9\, \pitch1~]} (\textit{so}) can be used to show inline marking of individual words.  This solution uses the pitchlevel glyphs in Charis SIL.  Glide variants are possible: 
[~\pitch1\, \pitch9\, \pitch1\pitch5~] 
[~\pitch1\, \pitch9\, \pitch1\pitch1\pitch5~] 
[~\pitch1\, \pitch9\, \pitch1\pitch1\pitch5\pitch5~] 
[~\pitch1\, \pitch9\, \pitch1\pitch5\pitch5~] 

\bigskip

\noindent An alternative solution to the same issue of showing \noindent \textbf{ibuuna} [ \tikz\draw[x=1mm, y=1mm, semithick](0,0)--(1.5,0) (2.5,2)--(5,2) (6,0)--(7.5,0); ] uses TikZ.  Glide variants are also possible here:
[ \tikz\draw[x=1mm, y=1mm, semithick](0,0)--(1.5,0) (2.5,2)--(5,2) (6,0)--(7.5,1); ]
[ \tikz\draw[x=1mm, y=1mm, semithick](0,0)--(1.5,0) (2.5,2)--(5,2) (6,0)--(7.5,0)--(8.5,1); ]
[ \tikz\draw[x=1mm, y=1mm, semithick](0,0)--(1.5,0) (2.5,2)--(5,2) (6,0)--(7.5,0)--(8.5,1)--(10,1); ]
[ \tikz\draw[x=1mm, y=1mm, semithick](0,0)--(1.5,0) (2.5,2)--(5,2) (6,0)--(7.5,1)--(9,1); ]


\subsection{Parallel marking}

\subsubsection{Using Charis font features}

\noindent ibuuna · basiidi kilumbu · ki-bakweenda kuna-kiziitu \\
\pitch1~~\pitch9\pitch9~~\pitch1~~~\pitch1~~\pitch9~~\pitch7~~\pitch5~\pitch3~~~~~\pitch1\pitch5 ~~~~\pitch1~~~\pitch1~~~~\pitch9\pitch9~~~\pitch8~~~\pitch4~~\pitch1~~~\pitch5~\pitch5~\fbox{\pitch1\pitch5} \\
\textit{so · they set aside a day · on which they would go to the in-laws \dots}

\subsubsection{Using pstricks}

\noindent\1ib\5u\5un\1a · b\1as\5i\5id\4i k\3il\2umb\pitchup u · k\1i-b\1akw\5e\5end\4a k\3un\1a-k\3iz\3i\3it\fbox{\pitchup u}\\
\textit{so · they set aside a day · on which they would go to the in-laws \dots}

\subsubsection{Using TikZ}

\noindent\begin{tikzpicture}[remember picture]
\node{\tikzpitch{1}ib\tikzpitch{2}u\tikzpitch{3}un\tikzpitch{4}a · b\tikzpitch{5}as\tikzpitch{6}iid\tikzpitch{7}i k\tikzpitch{8}il\tikzpitch{9}umb\tikzpitch{10}u · k\tikzpitch{11}i-b\tikzpitch{12}akw\tikzpitch{13}eend\tikzpitch{14}a k\tikzpitch{15}un\tikzpitch{16}a-k\tikzpitch{17}iz\tikzpitch{18}iit\tikzpitch{19}u}; \\
\draw[pitchlevel] (1 |- 0,0)--+(2,0) (2 |- 0, 4.5)--+(2,0) (3 |- 0, 4.5)--+(2,0) (4 |- 0, 0)--+(2,0) (5 |- 0,0)--+(2,0) (6 |- 0, 4.5)--+(2,0) (7 |- 0, 4)--+(2,0) (8 |- 0, 3)--+(2,0) (9 |- 0,1.5)--+(2,0) (10 |- 0, 0)--+(1,0.5)--+(2,1.5) (11 |- 0,0)--+(2,0) (12 |- 0, 0)--+(2,0) (13 |- 0, 4.5)--+(3,0) (14 |- 0, 3.5)--+(2,0) (15 |- 0,3)--+(2,0) (16 |- 0, 1)--+(2,0) (17 |- 0, 3)--+(2,0) (18 |- 0, 3)--+(2,0) (19 |- 0,0)--+(1,0.5)--+(2,1.5);
\end{tikzpicture}\\
\mbox{\textit{so · they set aside a day · on which they would go to the in-laws \dots}}

\end{document}

ingrese la descripción de la imagen aquí

La marca en línea (1.1) es sencilla. Con respecto a las tres versiones de marcado paralelo (1.2):

1.2.1: Charis SIL solo se puede utilizar con XeTeX. (Para LaTeX existe un método alternativo que utiliza el tipapaquete y algún código adicional; consulteesta pregunta.) Esta parece ser la única fuente actualmente que contiene estos glifos (en su Área de uso privado), pero en la práctica es poco probable que esto sea un problema. El problema principal es que, al igual que en la cuestión de la entonación, es necesario utilizar prueba y error para espaciar los glifos para que coincidan con las palabras. Un beneficio es que se puede utilizar \fboxpara resaltar un tono en particular.

1.2.2: El pstrickscódigo fue amablemente ofrecido por John Frampton, autor de expex. El principal beneficio es que incorpora los niveles de tono en el texto, lo que facilita la redacción del ejemplo. Se \fboxpuede utilizar para resaltar un tono (aunque también marca la letra, lo que es menos atractivo visualmente). Las líneas del tono también son más "nítidas" que en las otras dos opciones. Por el contrario, su compilación es más lenta y el código actual no permite marcar el tono del lado de la palabra (en línea). (Tampoco parece funcionar con LaTeX, pero quizás sea solo yo).

1.2.3: Esto es algo que he creado al molestar la solución de Matthew Leingang a la pregunta de entonación (¡ni siquiera sabría por dónde empezar con el código más completo de mwibrow!). Todo lo que hago es obtener la coordenada y luego dibujar una línea desde allí hasta un punto 2 mm a la derecha. (Lo ideal sería dibujar 1 mm en cada lado de la coordenada, pero ¿cómo?). En realidad, esto funciona bastante bien; en particular, los deslizamientos se pueden especificar con más detalle. Sin embargo, tal como está, necesita dos compilaciones debido a remember picturey no tengo forma de resaltar un tono. Además, el texto de kiKongo parece tener una ligera sangría por alguna razón.

Entonces, todo esto funciona, pero me interesaría cualquier sugerencia de mejora, en particular, para ordenar la solución TikZ, ya que funciona tanto para LaTeX como para XeTeX, y es independiente de las fuentes.

Respuesta1

EDITARagregue algunas correcciones y ejemplos de uso en línea (que probablemente deberían estar vinculados en una macro).

Con algunas adiciones adicionales al código de la pregunta de entonación (aquí proporciono el código completo ya que contiene numerosas correcciones), es posible agregar marcas. No estoy seguro acerca de la fuente independiente, probablemente no tal como está. Seguro que será una tontería con idiomas de derecha a izquierda sin trabajo adicional.

La idea básica es asociar símbolos con marcas que luego se analizan después de componer los caracteres. El objetivo principal era poder alinear los símbolos de marcado encima del texto, lo que parece un poco más limpio que poner marcas en el texto.

\contour[contour marks={0.55.0..0.55.?..3.2..+..0..0..5|..!..3.2..3.33.+}]
                       {ibuuna basiidi kilumbu ki-bakweenda kuna-kiziitu};

Se supone que el ejemplo que se muestra a continuación no es correcto desde el punto de vista lingüístico, sino que simplemente ilustra lo que puede hacer.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{fit}

\newdimen\contourraise
\newdimen\contourspacetokenwidth
\newdimen\contourtokenkern
\newcount\lasttokennumber
\newcount\currenttokennumber
\newcount\contourmarkcount
\newcount\contourtokenunderlinestate
\newbox\contourbox
\makeatletter

\tikzset{
    tight fit/.style={
        inner sep=0pt,
        outer sep=0pt,
    },
    %
    %
    % How far above the reference anchor of the text,
    contour raise/.code=\pgfmathsetlength\contourraise{#1},
    contour reference anchor/.store in=\contourreferenceanchor,
    contour reference anchor=base east,
    % The `scale' for the values in the contour height specification
    contour scale/.store in=\contourscale,
    contour scale=3pt,
    % The prefix for the contour marks.
    contour mark prefix/.store in=\contourmarkprefix,
    contour mark prefix=contour,
    % The style for the contour path
    contour/.style={
        draw, 
        rounded corners=1ex,
    },
    % The style for the token nodes
    every contour token/.style={
        anchor=base west, 
        tight fit,
    },
    contour underline/.style={
        draw
    },
    % The character to insert a mark (use with care)
    contour mark character/.store in=\contourmarkchar,
    contour mark character=|,
    % Want to change the code for contour marks? Use this key.
    contour mark code/.store in=\contourmarkcode,
    % Want to change the code for tokens? Use this key.
    contour token code/.store in=\contourtokencode,
    % Want to change the code for drawing the contour? Use this  key.
    contour code/.store in=\contourcode,
    %
    % Default stuff
    contour mark code={%
        \coordinate (\contourmarkprefix-\the\contourmarkcount)
          at ([yshift=\contourraise, y=\contourscale,               
          shift={(0,\currentcontourheight)}]token-\the\currenttokennumber.\contourreferenceanchor);
    },
    contour token code={%
        \node [every contour token/.try] at 
        ([xshift=\contourtokenkern]token-\the\lasttokennumber.base east) 
            (token-\the\currenttokennumber) {\token};
    },
    contour code={
        \draw [contour] (\contourmarkprefix-1)
            \foreach \y in {2,...,\the\contourmarkcount}{ -- 
                    (\contourmarkprefix-\y) };                  
    },
    contour marks/.style={
        contour mark list={#1},
        contour code={
             \draw [y=\contourscale, contour] \contourpath;                  
         },
         contour mark code={%
            \coordinate (@a) at ([yshift=\contourraise]token-\the\currenttokennumber.base west);
            \coordinate (@b) at ([yshift=\contourraise]token-\the\currenttokennumber.base east);
            \node [tight fit, fit={(@a) (@b)}] (\contourmarkprefix-\the\contourmarkcount) {};
        },
    },
    % Don't draw the contour.
    tokens only/.style={
        contour code={}
    },
    %
    % Only draw the contour (but the space is still used for the tokens)
    contour only/.style={
        every contour token/.append style={
            execute at begin node={\setbox\contourbox=\hbox\bgroup},
            execute at end node=\egroup\phantom{\box\contourbox}%
        },
        underline/.style={
            draw=none
        }
    },
    %
    % Make tokens follow the contour marks.
    tokens follow contour/.style={
        tokens only,
        contour token code={%
            \node [every contour token/.try, y=\contourscale] at 
                ([xshift=\contourtokenkern]token-\the\lasttokennumber.base east |- 
                0,\currentcontourheight) 
                (token-\the\currenttokennumber) {\token};
        },
    },
    % What style to use when drawing underline
    underline/.style={
        draw
    },
    % The underline is drawn along the south side of a node which 
    % takes this style.
    underline token/.style={
        inner ysep=1pt
    },
    % When grouping tokens (e.g., for putting box around)
    % this style is applied to a node that is fitted around the group
    token group/.style={
        inner xsep=1pt,
        inner ysep=2pt,
        rounded corners=2pt
    },
    % Draw boxes around tokens groups.
    box tokens/.style={
        token group/.append style={
            draw
        }
    },  
    % Change the width of the spaces.
    space token width/.code=\pgfmathsetlength\contourspacetokenwidth{#1},
    space token width=0.125cm,
    contour mark list/.store in=\@contourmarklist%
}




\def\at@{@}

\let\@contourmarklist=\@empty

\def\contour{%
    \pgfutil@ifnextchar[{\contour@opts}{\contour@opts[]}}
\def\contour@opts[#1]{%
    \pgfutil@ifnextchar x{\contour@@opts[#1]}{\contour@@opts[#1]}}
\def\contour@@opts[#1]#2;{%
    \begin{scope}[#1]
        \coordinate (token-0);
        \currenttokennumber=0\relax%
        \lasttokennumber=0\relax%
        \contourmarkcount=0\relax%
        \def\lastcontourheight{0}%
        \contourtokenunderlinestate=0\relax%
        \let\lastcontourtoken=\relax%
        \contourtokenkern=0pt\relax%
        \def\contourpath{}%
        \@contour#2@%
}


% Must check for a spaces
\def\@contour{\futurelet\@token\@checkforspace}

\def\@uscore{_}
\def\@checkforspace{%
    \ifx\@token\pgfutil@sptoken%
        \let\@next=\@replacespace%
    \else%
        \if\@token\contourmarkchar%
            \let\@next=\@contour@insertmark
        \else%
            \if\@token\@uscore
                \let\@next=\@contourtoggleunderline%
            \else%
                \let\@next=\@@contour%
            \fi%
        \fi%
    \fi%
    \@next%
}

\def\@contourtoggleunderline#1{%
    \advance\contourtokenunderlinestate by1\relax
    \ifnum\contourtokenunderlinestate>3\relax%
        \contourtokenunderlinestate=0\relax%
    \fi%
    \@contour%
}

\def\@contour@insertmark{%
    \afterassignment\@@contour@insertmark\let\@token=%
}

\def\@@contour@insertmark{%
    \futurelet\@token\@@@contour@insertmark}%



\def\@@@contour@insertmark{%
    \if\@token[%
        \let\@next=\@@@@contour@insertmark%
    \else%
        \let\currentcontourheight=\lastcontourheight%
        \let\@next=\@@@@@contour@insertmark%
    \fi%
    \@next%
}


\def\@@@@contour@insertmark[#1]{%
    \def\@tmp{#1}%
    \ifx\@tmp\@empty%
        \let\currentcontourheight=\lastcontourheight%
    \else%
        \def\currentcontourheight{#1}%
    \fi%
    \@@@@@contour@insertmark}

\def\@@@@@contour@insertmark{%
    \advance\contourmarkcount by1\relax%
     % Code for inserting mark
    \contourmarkcode%
    \let\lastcontourheight=\currentcontourheight%
    \@contour}

\def\contourspacetoken{{\hbox to \contourspacetokenwidth{\hfill}}}

\def\@replacespace#1{%
    \@contour\contourspacetoken#1%
}

\def\@@countour@afterlatenode{%
    \pgf@x=\pgfpositionnodelatermaxx\relax%
    \advance\pgf@x by-\pgfpositionnodelaterminx\relax%
    \global\edef\@contournodewidth{\the\pgf@x}%
}

\def\@@contour#1{%
    \def\@token{#1}%
    \if\@token\at@%
        \@contourdounderline%
        \pgfutil@ifundefined{pgf@sh@ns@tokengroup}{}{%
            \node [tight fit, fit={(tokengroup)}, token group/.try] {};
            \global\let\pgf@sh@ns@tokengroup=\relax%
        }%
        \let\@next=\@@@contour%
    \else%
        \lasttokennumber=\currenttokennumber%
        \advance\currenttokennumber by1%
        \contourtokenkern=0pt\relax%
        \ifnum\currenttokennumber>1\relax%
            %
            % Take care of kerning.
            % 
            % First get the width of the last and current token in the same hbox.
            %
            \let\pgfpositionnodelaterbox=\contourbox
            \pgfpositionnodelater\@@countour@afterlatenode%
            \def\token{\lastcontourtoken\@token}%
            \begingroup%
                \tikzset{every contour token/.append style={tight fit}}%
                \contourtokencode%
            \endgroup%
            \let\@contourkerntmp=\@contournodewidth%
            % 
            % Now subtract the width of last and current token in separate boxes.
            %
            \def\token{\hbox{\lastcontourtoken}\hbox{\@token}}%
            \begingroup%
                    \tikzset{every contour token/.append style={tight fit}}%
                    \contourtokencode%
            \endgroup%
            \pgfmathsetlength\contourtokenkern{\@contourkerntmp-\@contournodewidth}%
            \pgfpositionnodelater\relax%
        \fi%
        %
        % OK, now actually typset the current token
        %
        \let\token=\@token%
        \contourtokencode%
        \let\lastcontourtoken=\token%
        % Manage underline state
        \@contourdounderline%
        \def\@@token{\contourspacetoken}%
        \ifx\@token\@@token%
            \pgfutil@ifundefined{pgf@sh@ns@tokengroup}{}{%
                \pgfutil@ifundefined{pgf@sh@ns@underline}{}{%
                    \node [tight fit, fit={(tokengroup) (underline)}] 
                    (tokengroup) 
                {};}%
                \node [tight fit, fit={(tokengroup)}, token group/.try] {};
                \global\let\pgf@sh@ns@tokengroup=\relax%
            }%
        \else
            \pgfutil@ifundefined{pgf@sh@ns@tokengroup}{%
                \node [tight fit, 
                fit={(token-\the\currenttokennumber)}] 
                (tokengroup) {};
            }{%
                \node [tight fit, 
                fit={(token-\the\currenttokennumber) 
                (tokengroup)}] 
                (tokengroup){};
            }%
        \fi%
        \let\@next=\@contour
        %
    \fi%
    \@next%
}

\def\@contourdounderline{%
    \ifcase\contourtokenunderlinestate%
     \or
         \node [tight fit, fit={(token-\the\currenttokennumber)}] 
         (underline) {};
         \contourtokenunderlinestate=2\relax%
     \or%
            \node [tight fit,fit={(token-\the\currenttokennumber) (underline)}]
            (underline) {};
     \or%
            \node [tight fit, fit={(underline)}, underline token/.try] 
            (underline) {};
         \draw [underline/.try]
                    (underline.south west) -- (underline.south east);
            \pgfutil@ifundefined{pgf@sh@ns@tokengroup}{}{%
                 \node [tight fit, fit={(tokengroup) (underline)}] 
                 (tokengroup) {};%
                 \node [tight fit, fit={(tokengroup)}, token group/.try] {};
                 \global\let\pgf@sh@ns@tokengroup=\relax%
                 \global\let\pgf@sh@ns@underline=\relax%
             }
         \contourtokenunderlinestate=0\relax
     \fi%
}
\def\@@@contour{%
    \ifx\@contourmarklist\@empty%
    \else%
        \@contourdolist%
    \fi%
    \ifnum\contourmarkcount>1
        % Code for drawing contour
        \contourcode%
    \fi%
    \end{scope}%
    \ignorespaces%
}



\def\@contourstackpop{%
    \let\@contourstackitem=\@empty%
    \ifx\@contourstack\@empty%
    \else%
        \expandafter\@@contourstackpop\@contourstack\@@contourstackpop%
    \fi%
}


\def\@@contourstackpop#1#2\@@contourstackpop{%
    \def\@contourstackitem{#1}%
    \ifx\@contourstackitem\@empty%
        \def\@contourstackitem{#2}%
        \let\@contourstack=\@empty%
    \else%
        \def\@contourstack{#2}%
    \fi%
}

\def\@contourdolist{%
    \let\@contourstack=\@contourmarklist%
    \let\@contourstacklastitem=\@empty%
    \let\contourpath=\@empty%
    \edef\contourtotaltokens{\the\currenttokennumber}%
    \currenttokennumber=0\relax%
    \contourmarkcount=0\relax%
    \@@contourdolist%
}

\def\@@contourdolist{%
    \@contourstackpop%
    \advance\currenttokennumber by1\relax%
    \ifx\@contourstackitem\@empty%
        \let\@next=\relax%
    \else%
        \expandafter\ifx\csname contourcontourpathcommand@\@contourstackitem @\endcsname\relax%
        \else%
            \advance\contourmarkcount by1\relax%
            \let\currentcontourheight=\@contourstackitem%
            \contourmarkcode%
            \def\contourmarkstart{\contourmarkprefix-\the\contourmarkcount.west}%
            \def\contourmarkend{\contourmarkprefix-\the\contourmarkcount.east}%         
            \edef\contourpath{\contourpath \csname contourcontourpathcommand@\@contourstackitem @\endcsname}%
        \fi%
        \let\@next=\@@contourdolist%
        \let\@contourstacklastitem=\@contourstackitem%
    \fi
    \@next%
}


% \contourcontourpathcommand{<symbol>}{<contour path command code>}
% \contourmarkstart and \contourmarkend are setup as the
% left and right points of the charactor at zero contour height.
\def\contourcontourpathcommand#1{\expandafter\def\csname contourcontourpathcommand@#1@\endcsname}

% \contourmark{<symbol>}{<mark start height>}{<mark end height>}
%

\def\contourmark#1#2#3{%
    \contourcontourpathcommand{#1}{([shift={(0,#2)}]\contourmarkstart) -- ([shift={(0,#3)}]\contourmarkend)}
}

\makeatother

% Separator. 
\contourcontourpathcommand{.}{}

\contourmark{0}{0}{0}
\contourmark{1}{1}{1}
\contourmark{2}{2}{2}
\contourmark{3}{3}{3}
\contourmark{4}{4}{4}
\contourmark{5}{5}{5}
\contourmark{+}{0}{1}

\contourcontourpathcommand{!}{
    (\contourmarkstart) .. controls ++(0,2) and ++(0,2) .. (\contourmarkend)
}

\contourcontourpathcommand{?}{
    (\contourmarkstart) .. controls ++(0,-1) and ++(0,-1) .. ([shift={(0,2)}]\contourmarkend)
}
\contourcontourpathcommand{|}{
    % Continue previous path
    -- ([shift={(0, 3)}]\contourmarkend)
}



\begin{document}

\begin{tabular}{c}
\begin{tikzpicture}
\contour[contour/.append style={rounded corners=0}, contour raise=-0.75cm,
    contour marks={0.55.0..0.55.?..3.2..+..0..0..5|..!..3.2..3.33.+}]
                  {ibuuna basiidi kilumbu ki-bakweenda kuna-kiziitu};

\end{tikzpicture}
\\[0.5cm]
in line marking: ibuuna [\tikz[baseline={(0,0.25ex)}]%  
\contour[contour only, contour scale=2ex/6,
    contour marks={0.55.0}]
                  {ibuuna};]

\end{tabular}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada