Существует ли пакет или простой метод для генерации греческих символов из их римских аналогов?
Например, вот так:
\greek{a}
будет генерировать\alpha
\greek{b}
будет генерировать\beta
\greek{B}
будет генерировать \Beta
,
И так далее... Я понимаю, что такое соответствие не будет однозначной картой, но может быть достаточно близким.
Моя потребность в этом связана с набором команд, которые есть в моем докторском документе, чтобы гарантировать совместимое (всегда равное) использование определенных символов в некоторых категориях. Например, у меня есть несколько команд, таких как:
\newcommand{\setname}[1]{\ensuremath{\uppercase{#1}}}
\newcommand{\matrixname}[1]{\ensuremath{\mathbf{\uppercase{#1}}}}
\newcommand{\vectorname}[1]{\ensuremath{\vec{\lowercase{#1}}}}
\newcommand{\scalarname}[1]{\ensuremath{\lowercase{#1}}}
Таким образом, если мне когда-либо понадобится определить множество S, я могу использовать \setname{S}
и множество гарантированно будет заглавной буквой с математическим форматированием (как курсив). Если по какой-то причине позже мне понадобится изменить форматирование множеств на использование нижнего регистра, мне просто нужно будет изменить \setname
определение команды.
Теперь мне нужна новая команда для определенного непустого типа набора: алфавита. Я хочу использовать заглавные греческие символы для определения имени алфавита. Поэтому я хотел бы создать команду, например:
\newcommand{\alphabetname}[1]{\ensuremath{\greek{\uppercase{#1}}}}
Тогда для определения алфавита Σ я мог бы написать:
\alphabetname{s}
и получаем Σ.
решение1
Вот стандартная кодировка LaTeX для ввода греческого текста латинскими символами.
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\ucgreek}{m}
{
\str_case:nn { #1 }
{
{A}{\mathrm{A}}
{B}{\mathrm{B}}
{C}{\Sigma}
{D}{\Delta}
{E}{\mathrm{E}}
{F}{\Phi}
{G}{\Gamma}
{H}{\mathrm{H}}
{I}{\mathrm{I}}
{J}{\Theta}
{K}{\mathrm{K}}
{L}{\Lambda}
{M}{\mathrm{M}}
{N}{\mathrm{N}}
{O}{\mathrm{O}}
{P}{\Pi}
{Q}{\mathrm{X}}
{R}{\mathrm{P}}
{S}{\Sigma}
{T}{\mathrm{T}}
{U}{\Upsilon}
%{V}{}
{W}{\Omega}
{X}{\Xi}
{Y}{\Psi}
{Z}{\mathrm{Z}}
}
}
\NewDocumentCommand{\lcgreek}{m}
{
\str_case:nn { #1 }
{
{a}{\alpha}
{b}{\beta}
{c}{\varsigma}
{d}{\delta}
{e}{\varepsilon}
{f}{\varphi}
{g}{\gamma}
{h}{\eta}
{i}{\iota}
{j}{\vartheta}
{k}{\kappa}
{l}{\lambda}
{m}{\mu}
{n}{\nu}
{o}{o}
{p}{\pi}
{q}{\chi}
{r}{\rho}
{s}{\sigma}
{t}{\tau}
{u}{\upsilon}
%{v}{}
{w}{\omega}
{x}{\xi}
{y}{\psi}
{z}{\zeta}
}
}
\ExplSyntaxOff
\newcommand{\alphabetname}[1]{\uppercase{\ucgreek{#1}}}
\begin{document}
The alphabet $\alphabetname{S}$ is important.
\end{document}
решение2
Один из способов — просто выбрать нужный символ на основе кода соответствующего латинского символа, как показано ниже (код неполный, реализованы только первые четыре буквы, также вы можете использовать другое соответствие, \gamma
например g
):
\documentclass{article}
\newcounter{tmpgreek}
\newcommand{\greek}[1]{%
\setcounter{tmpgreek}{`#1}
\addtocounter{tmpgreek}{-`a}
\ifcase\value{tmpgreek}
\alpha\or\beta\or\gamma\or\delta
\fi
\setcounter{tmpgreek}{`#1}
\addtocounter{tmpgreek}{-`A}
\ifcase\value{tmpgreek}
\mathrm A\or \mathrm B\or\Gamma\or\Delta
\fi
}
\begin{document}
$\greek{a}$
$\greek{b}$
$\greek{c}$
$\greek{d}$
$\greek{A}$
$\greek{B}$
$\greek{C}$
$\greek{D}$
\end{document}