代码

代码

我在我的语言学文档中附上了一个元音图表,与此类似,虽然我知道有几个包(TIPA、pst-vowel)可以完成这项工作,但我有兴趣尝试使用 PGF/TikZ 绘制它。我以前没有用过 TikZ,所以我有点不确定从哪里开始画这个看似简单的图。

匈牙利元音

据我了解,我需要定义某种倾斜网格,其中的[默认]节点位于线的交点、中点和每个“正方形”的中间。然后实际的字母将绘制在上面,并按坐标定位;目前我对图中出现的字母的任意定位不感兴趣。

谁能帮我吗?

答案1

如果您不需要 PGF/TikZ 3.0,您可以使用此技巧来模拟仿射变换。

(0, 0)我定义了一个命令,其输入是到范围内的“笛卡尔”坐标,其输出是梯形(3, 2)四个角(称为、、hf和)定义的重心系统¹中的坐标。hblflb

\def\V(#1,#2){barycentric cs:hf={(3-#1)*(2-#2)},hb={(3-#1)*#2},lf={#1*(2-#2)},lb={#1*#2}}

自由使用此\V命令可以很容易地将节点放置在梯形中。

代码

\documentclass[12pt]{standalone}

\usepackage{tikz}
% Requires xelatex for the magnificent Brill font
\usepackage{fontspec}
\setmainfont{Brill}

\begin{document}
\begin{tikzpicture}[scale=3]
\large
\tikzset{
    vowel/.style={fill=white, anchor=mid, text depth=0ex, text height=1ex},
    dot/.style={circle,fill=black,minimum size=0.4ex,inner sep=0pt,outer sep=-1pt},
}
\coordinate (hf) at (0,2); % high front
\coordinate (hb) at (2,2); % high back
\coordinate (lf) at (1,0); % low front
\coordinate (lb) at (2,0); % low back
\def\V(#1,#2){barycentric cs:hf={(3-#1)*(2-#2)},hb={(3-#1)*#2},lf={#1*(2-#2)},lb={#1*#2}}

% Draw the horizontal lines first.
\draw (\V(0,0)) -- (\V(0,2));
\draw (\V(1,0)) -- (\V(1,2));
\draw (\V(2,0)) -- (\V(2,2));
\draw (\V(3,0)) -- (\V(3,2));

% Place all the unrounded-rounded pairs next, on top of the horizontal lines.
\path (\V(0,0))     node[vowel, left] {i} node[vowel, right] {y} node[dot] {};
\path (\V(0,1))     node[vowel, left] {ɨ} node[vowel, right] {ʉ} node[dot] {};
\path (\V(0,2))     node[vowel, left] {ɯ} node[vowel, right] {u} node[dot] {};
\path (\V(0.5,0.4)) node[vowel, left] {ɪ} node[vowel, right] {ʏ} node[dot] {};
\path (\V(0.5,1.6)) node[vowel, left] { } node[vowel, right] {ʊ} node[dot] {};
\path (\V(1,0))     node[vowel, left] {e} node[vowel, right] {ø} node[dot] {};
\path (\V(1,1))     node[vowel, left] {ɘ} node[vowel, right] {ɵ} node[dot] {};
\path (\V(1,2))     node[vowel, left] {ɤ} node[vowel, right] {o} node[dot] {};
\path (\V(2,0))     node[vowel, left] {ɛ} node[vowel, right] {œ} node[dot] {};
\path (\V(2,1))     node[vowel, left] {ɜ} node[vowel, right] {ɞ} node[dot] {};
\path (\V(2,2))     node[vowel, left] {ʌ} node[vowel, right] {ɔ} node[dot] {};
\path (\V(2.5,0))   node[vowel, left] {æ} node[vowel, right] { } node[   ] {};
\path (\V(3,0))     node[vowel, left] {a} node[vowel, right] {ɶ} node[dot] {};
\path (\V(3,2))     node[vowel, left] {ɑ} node[vowel, right] {ɒ} node[dot] {};

% Draw the vertical lines.
\draw (\V(0,0)) -- (\V(3,0));
\draw (\V(0,1)) -- (\V(3,1));
\draw (\V(0,2)) -- (\V(3,2));

% Place the unpaired symbols last, on top of the vertical lines.
\path (\V(1.5,1))   node[vowel]       {ə};
\path (\V(2.5,1))   node[vowel]       {ɐ};
\end{tikzpicture}
\end{document}

结果

最后,这是在 TikZ 中绘制的完整 IPA 元音表:

抱歉回复晚了。不过,我希望这能帮助到将来想画这个的人。顺便说一句,你可以得到语言学上极其优秀的 Brill 字体这里免费。


¹ 您可以在第 13.2.2 节“重心系统”PGF/TikZ 手册。

答案2

使用新版本的 TikZ v3.0,您还可以定义非线性变换:

\documentclass[tikz]{standalone}
\usetikzlibrary{quotes,calc}
\usepgfmodule{nonlineartransformations}
\makeatletter
\def\ydepxskew{%
\pgfmathqparse{0.02\pgf@y}%Adjust 0.02 for skewness amount
\pgf@x=\pgfmathresult\pgf@x%
\pgf@y=\pgf@y%
}
\makeatother
\begin{document}
\begin{tikzpicture}[myipa/.style 2 args={circle,fill,inner sep=0pt, "#1" {#2}}]
{
\pgftransformnonlinear{\ydepxskew}
    \draw (0pt,15mm) grid [xstep=10mm, ystep=15mm] (-20mm, 60mm);
    \foreach \x in {0,1,2}{
        \foreach \y in {0,1,2,3}{
            \coordinate (n-\x-\y) at ({-\x*10mm},{(\y+1)*15mm});
        }
    }
}
\node[myipa={\o}{left}] at ($(n-2-3)!0.4!(n-1-1)$) {a};
\draw[red,thick] (n-0-3) -- (n-1-1);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

下面的代码正确地将四边形的顶部、右侧和底部的比例设置为 4:3:2,并给出了两个如何使用坐标放置元音的示例xy

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}[vowel/.style={fill, circle, inner sep=0pt, text height=1.25ex}]
\coordinate (hf) at (0,3); % the high front vertex
\coordinate (hb) at (4,3); % the high back vertex
\coordinate (lb) at (4,0); % the low back vertex
\coordinate (lf) at (2,0); % the low front vertex

\draw (hf) -- (hb) -- (lb) -- (lf) -- cycle; % draws the trapezoid

\draw ($(hf)!1/3!(lf)$) -- ($(hb)!1/3!(lb)$); % the high-mid line
\draw ($(hf)!2/3!(lf)$) -- ($(hb)!2/3!(lb)$); % the low-mid line
\draw ($(hf)!0.5!(hb)$) -- ($(lf)!0.5!(lb)$); % the center line

\node[vowel,label={[label distance=-1pt]left:i}] at (0.8,2.6) {}; % places the [i] vowel at (0.8,2.6)
\node[vowel,label={[label distance=-3pt]below right:o}] at (3.5,1.7) {}; % places the [o] vowel at (3.5,1.7)
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容