Nhận danda ở Devanagari trong IAST

Sep 21 2020

Tôi đang cố lấy biểu tượng danda ở Devanagari trong IAST. Mã của tôi là

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

Khi tôi sử dụng \sdcái mà tôi đã khai báo trong phần mở đầu, tôi có thể lấy danda trong môi trường \ rom. Có cách nào tôi có thể lấy trực tiếp danda trong \rommôi trường mà không cần sử dụng \sdbằng cách sử dụng một số khai báo trong phần mở đầu không.

Trả lời

1 ShreevatsaR Oct 18 2020 at 15:28

Bạn có thể khai báo ký tự |là một ký tự hoạt động (để nó được coi như một macro) và cung cấp cho nó định nghĩa giống như của bạn \sd, bằng cách thêm hai dòng sau:

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

Sửa đổi ví dụ của bạn:

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

Đầu ra:

Trong thực tế, bạn có thể muốn đặt những dòng đó ở đầu tệp; chỉ cần đảm bảo rằng nó sau khi \sdđã được xác định (và sau bất kỳ |ký tự nào trong tệp của bạn đang được sử dụng cho bất kỳ mục đích nào khác ngoài mục đích là Devanagari danda).