Alternate he / she in text

Following up on the discussion about how to get this to work in practice, here's a modification to Josef's solution which allows one to use anaphoric pronouns linked to the current state. Pronominal anaphora is quite complicated, so even this solution would only work for a limited set of cases, but it would still be a bit of an improvement.

Update: I've implemented this solution as the he-she package.

The problem arises in sentences like the following:

  1. If someone thinks \heshe is sick, he should go to the doctor.

(As Norman notes, it's perfectly colloquiual English to use 'they' for these sorts of pronouns, but since that's not up for debate here, we'll soldier on :-) )

In sentence (1) we need the pronoun in the main clause to match in gender with the pronoun in the 'if'-clause. If we use the \heshe macro we won't know what the gender is, however, since it will change depending on how many times it has previously been used.

So we really need two macros: one for the switch, and one for anaphoric reference to the current gender state. I've implemented this simply by creating one extra macro within Josef's solution (of course the same idea works for Martin's as well.)

    \documentclass{article}
    \usepackage{xspace}
    \newif\ifhe\hetrue
    \newcommand*\heshe%
    {%
      \ifhe%
        he%
        \global\hefalse%
      \else%
        she%
        \global\hetrue%
      \fi%
    \xspace
    }%
    \newcommand*\he%
    {\ifhe%
        she
      \else%
        he%
      \fi
    \xspace
    }
    \begin{document}

If someone thinks \heshe is sick \he should go to a doctor immediately.
When \he goes to the the doctor, \heshe can figure out the problem.
\end{document}

This is a more linguistically useful version than restricting the scope of the change to a single sentence, since in the second sentence of the source example, there are two instances of a pronoun: the first is anaphoric to the previous sentence (and so should match in gender, but the second can be assigned a new gender.)

Output of sample document:


You can do this by defining an if-switch which toggles every time it is used:

\newif\iffemale
\usepackage{xspace}

\newcommand*\heorshe{%
   \iffemale
      she
      \global\femalefalse% next one is male
   \else
      he
      \global\femaletrue% next one is female
   \fi
   \xspace
}

% Capitalized version:
\newcommand*\Heorshe{%
   \iffemale
      She
      \global\femalefalse
   \else
      He
      \global\femaletrue
   \fi
   \xspace
}

edits: Added missing \global and \xspace.


I tried hard but Martin was faster ;-)

\documentclass{scrartcl}
\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{xspace}
\newif\ifhe\hetrue
\newcommand*\heshe%
{%
  \ifhe%
    he%
    \global\hefalse%
  \else%
    she%
    \global\hetrue%
  \fi%
  \xspace
}%
\begin{document}
First \heshe is a man, but then \heshe turns into a woman. And back again: \heshe
\end{document}