处理文本中的可选逗号

处理文本中的可选逗号

我正在使用 LaTeX 类用丹麦语编写文档memoir

在丹麦语中,我们有两种不同的系统来在文本中放置逗号;一种系统使用许多逗号,另一种系统使用较少的逗号。我希望我的文档能够生成这两种系统。

简单的解决方案是引入一个\optionalcomma命令,然后将其定义为

\newcommand{\optionalcomma}{, }

或者

\newcommand{\optionalcomma}{ }

取决于我想要什么输出。

然而,\optionalcomma在文本中放置无数的命令,使得我(作者)的阅读变得更加困难。

所以我想知道,是否有可能有一种非常不显眼的方式来写可选逗号。例如,是否有一种方法可以使用双逗号(或其他“小巧”的命令)来表示可选逗号?

这将使我能够在我的 LaTeX 文件中写入以下内容:

Han så,, at jeg kom, og at jeg var glad.

并且对 LaTeX 文件进行最少的更改使其产生以下输出:

Han så, at jeg kom, og at jeg var glad.

或这个:

Han så at jeg kom, og at jeg var glad.

答案1

如果 TeX 文件中不显眼的部分是活跃角色。以下是使用;for执行此操作的方法\optionalcomma(如果您不需要真正的分号)。

\documentclass{memoir}

\newcommand{\optionalcomma}{,}
% \newcommand{\optionalcomma}{}

\catcode`;=\active
\newcommand;{\optionalcomma}

\begin{document}
Well, what do you think; about this?

\end{document}

答案2

你可能会滥用\,这个目的。如果你真的需要文本模式下\thinspace的原意,请使用。\,

\DeclareRobustCommand{\,}{\ifmmode\mskip\thinmuskip\else\optionalcomma\fi}
\newcommand{\optionalcomma}{} % standard, no comma
\newcommand{\activateoptionalcomma}{\renewcommand{\optionalcomma}{,}}

没有可选逗号的示例

\documentclass{memoir}

\DeclareRobustCommand{\,}{\ifmmode\mskip\thinmuskip\else\optionalcomma\fi}
\newcommand{\optionalcomma}{} % standard, no comma
\newcommand{\activateoptionalcomma}{\renewcommand{\optionalcomma}{,}}

\begin{document}

Well, what do you think\, about this?

\end{document}

在此处输入图片描述

启用可选逗号的示例

\documentclass{memoir}

\DeclareRobustCommand{\,}{\ifmmode\mskip\thinmuskip\else\optionalcomma\fi}
\newcommand{\optionalcomma}{} % standard, no comma
\newcommand{\activateoptionalcomma}{\renewcommand{\optionalcomma}{,}}

\activateoptionalcomma

\begin{document}

Well, what do you think\, about this?

\end{document}

在此处输入图片描述

答案3

如果您可以自由使用 LuaLaTeX,那么这很容易。:-)

下面的代码设置了两个 Lua 函数,分别称为functionAfunctionB,以及两个 LaTeX 实用宏,分别称为\OptionA和 ,\OptionB以激活相应的 Lua 函数。所谓“激活”Lua 函数,我的意思是将其分配给 LuaTeX 的process_input_buffer回调,该回调在很早的阶段对输入进行操作,即TeX 开始其通常的宏扩展操作。functionA和都functionB使用 Lua 强大的gsub(“全局替换”)字符串函数。

我假设,在实践中,您的文档将只包含一个\OptionA指令或一个\OptionB指令。理想情况下,您会在之后立即发出指令\begin{document}

以下屏幕截图显示了在环境启动时执行Han så,, at jeg kom, og at jeg var glad.if的输出。\OptionAdocument

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{memoir}
\usepackage[danish]{babel}

%% Set up two Lua functions:
\directlua{%
function functionA ( s )  return ( s:gsub(",," ,",") )  end
function functionB ( s )  return ( s:gsub(",," , "") )  end
}

%% Set up two LaTeX macros to activate the corresponding Lua functions:
\newcommand{\OptionA}{\directlua{luatexbase.add_to_callback(
   "process_input_buffer" , functionA , "functionA")}}
\newcommand{\OptionB}{\directlua{luatexbase.add_to_callback(
   "process_input_buffer" , functionB , "functionB")}}

\begin{document}
\OptionA % or: \OptionB
Han så,, at jeg kom, og at jeg var glad.
\end{document}

相关内容