Usando TikZ para representar o nível de pitch

Usando TikZ para representar o nível de pitch

Depois do resultado muito produtivo da minha recente pergunta sobreentonação, sinto-me encorajado a fazer uma pergunta relacionada. No anterior, níveis específicos de altura são conectados para produzir um contorno de entonação, mas para línguas tonais (onde cada sílaba de uma palavra geralmente tem uma altura particular associada a ela, é necessária uma abordagem diferente, onde os níveis de altura são indicados por pequenas linhas horizontais . Tenho algumas abordagens para isso que já funcionam e agora criei uma nova no TikZ com base na abordagem de Matthew Leingang para a pergunta anterior, mas tenho certeza de que melhorias são possíveis. , usando exemplos do kiKongo, uma língua bantu 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}

insira a descrição da imagem aqui

A marcação inline (1.1) é simples. Relativamente às três versões de marcação paralela (1.2):

1.2.1: Charis SIL só pode ser usado com XeTeX. (Para LaTeX existe uma abordagem alternativa usando o tipapacote e algum código adicional - vejaessa questão.) Esta parece ser a única fonte atualmente que contém esses glifos (em sua Área de Uso Privado), mas na prática é improvável que isso seja um problema. A questão principal é que, como na questão da entonação, é necessário usar tentativa e erro para espaçar os glifos para corresponder às palavras. Um benefício é que é possível usá-lo \fboxpara destacar um tom específico.

1.2.2: O pstrickscódigo foi gentilmente cedido por John Frampton, autor de expex. O principal benefício é que ele incorpora os níveis de tom no texto, facilitando a escrita do exemplo. Um \fboxpode ser usado para destacar um tom (embora também marque a letra, o que é menos atraente visualmente). As linhas de pitchlevel também são "mais nítidas" do que nas outras duas opções. Por outro lado, é mais lento para compilar e o código atual não permite marcação de pitch no lado da palavra (inline). (Também parece não funcionar com LaTeX, mas talvez seja só eu.)

1.2.3: Isso é algo que eu criei molestando a solução de Matthew Leingang para a questão da entonação (eu nem saberia por onde começar no código mais abrangente do mwibrow!). Tudo o que estou fazendo é pegar a coordenada e desenhar uma linha até um ponto 2 mm à direita. (Idealmente, eu desenharia 1 mm de cada lado da coordenada, mas como?) Na verdade, isso funciona muito bem - em particular, os deslizamentos podem ser especificados com mais detalhes. No entanto, do jeito que está, são necessárias duas compilações por causa do remember picture, e não tenho como destacar uma proposta. Além disso, o texto do kiKongo parece estar ligeiramente recuado por algum motivo.

Então, tudo isso funciona, mas eu estaria interessado em sugestões de melhorias, em particular, para organizar a solução TikZ, já que funciona tanto para LaTeX quanto para XeTeX e é independente de fonte.

Responder1

EDITARadicione algumas correções e exemplos de uso inline (que provavelmente deveriam estar vinculados a uma macro).

Com algumas adições extras ao código a partir da questão da entonação (forneço o código inteiro aqui, pois contém inúmeras correções), é possível adicionar marcas. Não tenho certeza sobre a independência de fonte, provavelmente não como está. Certamente será um lixo com idiomas da direita para a esquerda sem trabalho extra.

A ideia básica é associar símbolos a marcas que são analisadas após a composição dos caracteres. O objetivo principal era poder alinhar os símbolos de marcação acima do texto, o que parece um pouco mais limpo do que colocar marcas no 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};

O exemplo mostrado abaixo não deve ser lingüisticamente correto, mas apenas ilustra o que pode fazer.

\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}

insira a descrição da imagem aqui

informação relacionada