Использование tikz для преобразования одной буквы

Использование tikz для преобразования одной буквы

Я хочу преобразовать одну букву на титульном листе очень специфическим образом. Чтобы проиллюстрировать эффект, которого я пытаюсь добиться, я прикрепил изображение. Обратите внимание, что левая половина буквы H короче правой, но при этом верх буквы ровный. Подозреваю, что захочу исказить ее каким-то образом с помощью tikz, но не уверен, как это сделать. Может кто-нибудь помочь?

Растянутая буква H

решение1

Отказ от ответственности:Это НЕ ответ TikZ, но что поделать...

ПринимаяОтвет Трастона на этот вопрос относительно контуров текстаДля справки, вы можете сделать следующее, чтобы получить деформированную букву H. Это доказательство концепции, поэтому оно работает только с отдельными буквами, но его можно адаптировать для целых слов с помощью дальнейшей настройки.

\documentclass{standalone}
\usepackage[latex,shellescape]{gmp}
\begin{document}
\begin{mpost}[name=H]
picture nice;
path P, PP;

nice := image(draw thelabel(\btex H etex,origin));

%Transformation
vardef T(expr p) =
    save x, y;
    x := xpart p; y := ypart p;
%0.01 by guessing. Play with other values
    (x,0.01x*y) 
enddef;

%Assumes a cyclic path
%It can be done better
vardef TT(expr P) =
    T(point 0 of P) 
    .. controls
    T(postcontrol 0 of P) and T(precontrol 1 of P) 
    for j = 1 upto (length P - 1):
        .. T(point j of P) 
        .. controls T(postcontrol j of P) 
            and T(precontrol (j+1) of P) 
    endfor
    .. cycle
enddef;

for i within nice:
    if textual i:
        for j = 1 upto length textpart i:
            string s; s := substring(j-1,j) of textpart i;
            picture g; g := glyph ASCII s of fontpart i scaled 1/10;
            picture r; r := image(
            for x within g:
                picture xx; xx := image(draw g);
%75 is also guessing. Try other values
%Bad filling. It works for the letter H, tho.
                fill TT(pathpart x shifted (llcorner xx - ulcorner xx + 75right)) withcolor
                if greypart x = 1:
                    1
                else:
                    (1,0.843,0)
                fi;
            endfor
            );
            draw r;
        endfor 
    fi
endfor
\end{mpost}\usempost{H}%
\end{document}

введите описание изображения здесь

Для сравнения, вот результат для буквы Q (применяется фальшивое незаполнение):

введите описание изображения здесь

Связанный контент