I wan't to typeset a radio script, which will look like this example.

Basically, a column with the name of the role and another column with the text.

Because I'm using this script for non-native speakers also, I'd like to implement a third column where annotations for vocabulary can be made. The third column should be roughly 20%-25% of the total width of the page.

This is how I would imagine it to look like:

What is the most efficient way to do this?

It would be great if you could provide a MWE of your solution.

• My approach would probably be to use one of the existing packages to set plays (why reinvent the wheel?), use a pagelayout with a wide margin and then put the annotation in margin notes. – samcarter_is_at_topanswers.xyz May 9 '17 at 20:20
• Perhaps this answer (of mine) could be adapted to this: tex.stackexchange.com/a/357587. What isn't clear is how you want to implement the 'third' column. What happens, e.g., when there is no third column? What happens when there is a third column, but the 'second' column is longer than one line? (Though marginal notes is definitely one solution to this problem!) – jon May 9 '17 at 20:20
• You want the line? Doesn't seem typographically sound (to me).... – jon May 9 '17 at 20:37

If you don't actually want the glosses to appear in the margin, but rather within the bounds of the textblock, you can fake it in the following way. (If you do want them in the margins, it is even easier to do it.)

\documentclass{article}
\usepackage[
showframe,% just for visualization purposes
]{geometry}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\usepackage{ragged2e}%   for: better line-breaking in narrow text blocks
\usepackage{enumitem}
\setlist[description]{
font={\sffamily\bfseries},
labelsep=0pt,
labelwidth=\transcriptlen,
leftmargin=\transcriptlen,
}

% Lengths:
\newlength{\transcriptlen}
\newlength{\glosswidth}

% How much space for the glosses?
\setlength{\glosswidth}{3cm}

\begin{description}}%
{\end{description}

\NewDocumentCommand {\setspeaker} { mo } {%
\IfNoValueTF{#2}
{\expandafter\newcommand\csname#1\endcsname{\item[#1:]}}%
{\expandafter\newcommand\csname#1\endcsname{\item[#2:]}}%
\IfNoValueTF{#2}
{\settowidth{\transcriptlen}{#1}}%
{\settowidth{\transcriptlen}{#2}}%
}

% Easiest to put the longest name last...
\setspeaker{mike}[MIKE]
\setspeaker{thresa}[THRESA]
\setspeaker{andrew}[ANDREW]

% How much of a gap between speakers and text?

% glossing command
\newcommand{\gloss}[2]{%
\glmaintext{#1}%
\glmark
\marginpar{\hspace*{-\glosswidth}%
\RaggedRight\glmargintext{#2}}}
\newcommand*{\glmark}{}
\newcommand*{\glmaintext}[1]{\emph{#1}}
\newcommand*{\glmargintext}{\footnotesize\sffamily\itshape}

\begin{document}
\noindent
I wan't to typeset a radio script, which will look like this example.

Basically, a column with the name of the role and another column with
the text.

Because I'm using this script for non-native speakers also, I'd like
to implement a third column where annotations for vocabulary can be
made. The third column should be roughly 20\%--25\% of the total width
of the page.

This is how I would imagine it to look like:

\mike Hello, how are you \gloss{doing}{to do: etwas Machen}, I'm
wondering whether any of the issues with other answers will still
\gloss{apply}{to apply: anwenden}.

\andrew This is just one line.

\thresa This is a multiple line text without annotations on the
right side.

\andrew This is just one line.

\thresa This is a multiple line text without annotations on the
right side.

\thresa This is a multiple line text without annotations on the
right side.

\andrew This is just one line.

Since your question does not have an MWE, I have had to make a number of assumptions (such as \documentclass)....