Zdobywanie dandy w Devanagari w IAST

Sep 21 2020

Próbuję uzyskać symbol dandy, który jest w Devanagari w IAST. Mój kod to

\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}

Kiedy używam tego, \sdco zadeklarowałem w preambule, mogę uzyskać dandę w środowisku \ rom. Czy jest sposób, żebym mógł bezpośrednio dostać dandę do \romśrodowiska bez użycia polecenia \sd, używając jakiejś deklaracji w preambule.

Odpowiedzi

1 ShreevatsaR Oct 18 2020 at 15:28

Możesz zadeklarować znak |jako aktywny znak (aby był traktowany jak makro) i nadać mu taką samą definicję jak twoja \sd, dodając te dwie linie:

\catcode`|=\active
\let|=\sd

Modyfikowanie przykładu:

\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}

Wynik:

W praktyce prawdopodobnie chciałbyś umieścić te wiersze na początku pliku; po prostu upewnij się, że \sdzostał zdefiniowany po (i po każdym |znaku w twoim pliku, który jest używany w innym celu niż jako danda Devanagari).