在角色扮演写作已经成为交换的传统他和她按段落进行。例如“他在第一级时每天可以使用一次打击邪恶的能力。(等等等等,段落中断)当圣骑士达到 4 级时,她可以每天使用该能力三次。”
现在,这并不难写,但段落经常被移动等。有没有办法让我在文本中输入\hir
和\sie
,然后让 LaTeX 找出段落的顺序,并将它们交换成他,她,他,她,每段交替出现男性和女性?
答案1
该he-she
软件包现在可以满足您的所有需求。(由于这个问题,我添加了一个软件包选项。)让我们首先看看如何在没有自动化的情况下做到这一点(以及为什么这可能是更好的选择。)
部分自动化
该he-she
包为代词实现了两组不同的宏:一组(\heshe
、\himher
和\hisher
)输出代词,并在下次使用同一组中的任何一个时切换性别。例如:
\Heshe put \hisher coat beside a statue of \himher.
将输出
他把她的外套放在他的雕像旁边。
或者:
她把他的外套放在她的雕像旁边。
取决于当前状态。
然而,第二组代词(\he
,,\him
)\his
允许你继续当前性别状态可以随意更改,就你的情况而言,可以改成一整段。因此,在这种情况下:
\Heshe put \his coat beside a statue of \him.
将输出
他把外套放在自己的雕像旁边。
或者:
她把外套放在自己的雕像旁边。
取决于当前状态。
因此,如果你想在每段中更改代词,你可以这样做第一的段落中代词的实例是切换版本,而每个后续代词都是非切换(重复)版本。
现在,这显然不会自动切换每个段落,但我不确定这是否可取。正如句子不是改变性别的正确级别一样,我也不清楚段落是否是改变性别的正确级别,因为你可能真的想在某种更高的结构级别上进行更改(例如“主题更改”)。因此,重置每个段落的性别可能不是最好的主意,而是重置每组形成连贯主题的一个或多个段落的性别。
然而,如果你执着于自动化(毕竟这是我们都喜欢 LaTeX 的原因之一),那么可以这样做:
完全自动化
将解决方案适配everypar
到he-she
包中,我们可以执行以下操作。我已使用该everyhook
包与进行交互\everypar
。现在已将其作为选项添加到包本身。
\documentclass{article}
\usepackage{everyhook}
\usepackage{he-she}
\PushPreHook{par}{\makebox[0pt][0pt]{\heshe}}
\begin{document}
When a player rolls the dice \he will have to do something. \He will do that thing
with all of \his powers and \he will make sure that nobody sees \him.
When a player rolls the dice \he will have to do something. \He will do that thing
with all of \his powers and \he will make sure that nobody sees \him.
\end{document}
这里的想法是,我们\par
在零宽度框中挂接并发出代词命令的切换版本。然后我们在运行文本中使用代词的照应版本。
作为套餐选项
这已作为选项实现到包中[para]
。因此,使用当前版本的包 (v1.1),您只需执行以下操作:
\documentclass{article}
\usepackage[para]{he-she}
\begin{document}
When a player rolls the dice \he will have to do something. \He will do that thing
with all of \his powers and \he will make sure that nobody sees \him.
When a player rolls the dice \he will have to do something. \He will do that thing
with all of \his powers and \he will make sure that nobody sees \him.
\end{document}
答案2
编辑
如果您需要的功能是确切地如上所述,然后Alan Munn 的回答无疑是更好的解决方案,而且远不如我自己的解决方案有趣。但是,下面的答案展示了一种基本方法,在许多其他情况下可能有用。
创建一个新的 if 并将切换器挂接到\everypar
,您就可以做到这一点。(钩子必须在里面,document
因为document
显然重新定义了它。)
但请注意,这lipsum
似乎不符合正常规则(事实上它可能\everypar
再次重新定义)。
\documentclass{article}
\newif\ifgendermale
\newcommand{\switchHeShe}{%
\ifgendermale%
\gendermalefalse%
\else%
\gendermaletrue%
\fi}
\newcommand{\hir}{\ifgendermale his\else her\fi}
\newcommand{\sie}{\ifgendermale he\else she\fi}
\usepackage{lipsum}
\gendermaletrue
\begin{document}
\everypar=\expandafter{\the\everypar\switchHeShe}
Nobody knows \hir{} name. Nobody knows the size of \hir{} naval.
In this game, the player will try to determine the naval size and name
of the antagonist. In doing so, \sie{} will probably have fun.
If \sie{} doesn't though, just hit \hir{} over the head with a naval.
As you can see, this works for the main body of text. The minute you
introduce environments, notice,
\begin{itemize}
\item \sie{} doesn't do capitalization.
\item \hir{} nose may be offended.
\item \verb+\everypar+ gets reset all the time.
\item By valiant diligence\dots and stuff\dots \sie{} can
\begin{itemize}
\everypar=\expandafter{\the\everypar\switchHeShe}
\item see \hir{} own nose
\item know \hir{} own destiny
\item complain about built-in environments \textit{completely}
resetting the hook.
\end{itemize}
\end{itemize}
\end{document}
答案3
只要避免使用代词即可。这样听起来也更好。
“在第一级时,他每天可以使用一次惩恶能力。(等等等等,段落中断)当圣骑士达到第四级时,她可以每天使用该能力三次。”
“在第一级时,惩恶能力每天可使用一次。(等等)当圣骑士达到四级时,该能力每天可使用三次。”