我正在使用 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 函数,分别称为functionA
和functionB
,以及两个 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的输出。\OptionA
document
% !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}