我正在写一篇有关摩尔斯电码历史的文章,但在打印点和虚线时遇到了困难(打印文档时它们会合并在一起)。
是否也可以编写一个宏,将摩尔斯电码映射到单词和字母?例如字母 a 是“.-”等。
答案1
这是一个与其他发布的解决方案略有不同的解决方案。
首先我们定义两个列表来保存莫尔斯电码。一个用于保存字母,另一个用于保存数字
\def\morselist{.-,-...,-.-.,-..,.,..-.,%
--.,....,..,.---,-.-,.-..,%
--,-.,---,.--.,--.-,.-.,%
...,-,..-,...-,.--,-..-,-.--,--..}
然后使用此列表为每个字母和数字创建宏。一旦完成,就可以解析任何单词并打印相应的摩尔斯符号。
\documentclass{article}
\usepackage{soul}
\newcounter{ct}
\begin{document}
\makeatletter
% the alphabet list
\def\morselist{.-,-...,-.-.,-..,.,..-.,%
--.,....,..,.---,-.-,.-..,%
--,-.,---,.--.,--.-,.-.,%
...,-,..-,...-,.--,-..-,-.--,--..}
% get the numbers 48-57
\def\morsenumbers{.----,..---,...--,....-,
.....,-....,--...,---..,----.,-----}
% letters
\setcounter{ct}{97}
\@for \i:=\morselist\do{%
\texttt{\char\thect =\i}\par
\def\MM{\i}%
\expandafter\xdef\csname\thect @\endcsname{\MM}%
\stepcounter{ct}%
}
% numbers
\setcounter{ct}{48}
\@for \i:=\morsenumbers \do{%
\texttt{\char\thect =\i}\par
\def\MM{\i}%
\expandafter\xdef\csname\thect @\endcsname{\MM}%
\stepcounter{ct}%
}
\def\printMorse#1{%
\texttt{\@nameuse{\number`#1@}}
}
\def\getMorseWord@#1#2\relax{%
\ifx\relax#2\relax
#1=\printMorse{#1}
\else
#1=\printMorse{#1}%\par
\getMorseWord@#2\relax
\fi
}
\def\getMorseWord#1{%
\getMorseWord@ #1\relax
}
% type in the word you want printed in
% morse code here.
\getMorseWord{saltypen sos}
\makeatother
\end{document}
答案2
更重要的是,如果您有 ttf 或 otf 格式的摩尔斯电码字体,您可以使用fontspec
该字体:
% compile with lualatex or xelatex
\documentclass{article}
\usepackage{fontspec}
\newfontface\morse{Morse Code} % replace with the actual name of the font
\begin{document}
{\morse Some Text}
\end{document}
答案3
这是莫尔斯包;它有点旧,但似乎工作正常,尽管我不能确定,因为我对摩尔斯电码一无所知(除了它存在);一个小例子:
\documentclass[12pt]{article}
\usepackage{morse}
\newcommand\LatMor[1]{%
the letter #1 is {\morse #1}}
\begin{document}
\LatMor{a}\LatMor{b}\LatMor{x}\LatMor{y}\LatMor{z}
{\morse M o r s e T e x t}
{\Large\morse M o r s e T e x t}
\end{document}
可能您必须手动安装该软件包,但这似乎很容易;我只是做了测试,复制了我的工作目录中的所有文件,一切正常。
编辑:我用命令的定义更新了答案\LatMor
。
答案4
ConTeXt 有一个基于 lua 的模块用于莫尔斯电码。将其翻译成 LaTeX 应该很简单。
以下是一个示例用法:
\usemodule[morse]
\starttext
\Morse{This is some text in English that will be translated to Morse code}
\blank[big]
\MorseCode{—·—· ——— —· — · —··— —+—— —·— ·· ···—}
\stoptext
这使