Obtendo danda em Devanágari em IAST
Estou tentando obter o símbolo de danda que está em Devanagari no IAST. Meu código é
\documentclass[letterpaper,12pt]{article}
\usepackage{fontspec}
\newfontfamily{\san}[Script=Devanagari,Mapping=velthuis-sanskrit]{Shobhika}
\newfontfamily{\rom}[Mapping=itrans-iast]{Noto Serif}
\newcommand{\sd}{{\san|}}
\begin{document}
{\san
namaste|
}\\
{\rom
namaste{\sd}
}\\
{\rom
namaste|
}
\end{document}
Quando eu uso o \sdque declarei no preâmbulo, posso obter o danda no ambiente \ rom. Existe uma maneira de obter diretamente a danda no \romambiente sem usar o \sd, usando alguma declaração no preâmbulo.
Respostas
Você pode declarar o caractere |como um caractere ativo (para que seja tratado como uma macro) e dar a ele a mesma definição que o seu \sd, adicionando estas duas linhas:
\catcode`|=\active
\let|=\sd
Modificando seu exemplo:
\documentclass[letterpaper,12pt]{article}
\usepackage{fontspec}
\newfontfamily{\san}[Script=Devanagari,Mapping=velthuis-sanskrit]{Shobhika}
\newfontfamily{\rom}[Mapping=itrans-iast]{Noto Serif}
\newcommand{\sd}{{\san|}}
\begin{document}
{\san
namaste|
}
{\rom
namaste{\sd}
}
{\rom
namaste| (before)
}
\catcode`|=\active
\let|=\sd
{\rom
namaste| (after)
}
\end{document}
Resultado:
Na prática, você provavelmente deseja colocar essas linhas no início do arquivo; apenas certifique-se de que seja depois de \sdter sido definido (e depois de qualquer |caractere em seu arquivo que esteja sendo usado para qualquer propósito diferente de Devanagari danda).