我正在尝试在书籍类中配置双语(孟加拉语+英语)引用环境。对于以下 MWE,我使用这些字体:
(第二个可以用任何熟悉的英文字体替换。)
测试_报价.sty
\RequirePackage[banglamainfont=Kalpurush, % Kalpurush font: https://www.omicronlab.com/bangla-fonts.html
banglattfont=Kalpurush,
]{latexbangla}
%activate polyglossia
\setdefaultlanguage[numerals=Bengali,
changecounternumbering=true]{bengali}
%number all levels
% \setcounter{secnumdepth}{5}
% \setotherlanguage{english}
% new font for quotation
\newfontfamily\quotefont[%
% Scale= 1.1,
% WordSpace=1.4,
% AutoFakeSlant=1.2,
% AutoFakeBold=1.2
]{[mytype]} % My Type Of Font font: https://www.1001freefonts.com/my-type-of-font.font
% A chapquote environment for chapter quotes
\newenvironment{chapquote}[2][2em]
{\setlength{\@tempdima}{#1}%
\def\chapquote@author{#2}%
\parshape 1 \@tempdima \dimexpr\textwidth-2\@tempdima\relax%
\uccoff \quotefont
}
{\par\hfill \uccoff — \uccon \chapquote@author\hspace*{\@tempdima}\par\bigskip}
测试_quote.tex
% !TEX program = xelatex
\documentclass[12pt, oneside]{book}
\usepackage{test_quote}
\begin{document}
আমার পছন্দের একটা উক্তি হলঃ \\
\begin{chapquote}{কার্ল সেগান (Carl Sagan)}
One glance at a book and you hear the voice of another person, perhaps someone dead for 1000 years. To read is to voyage through time.
\end{chapquote}
\vspace{4em}
এটার বাংলা অনুবাদ করলে দাঁড়ায় এমনঃ \\
\begin{chapquote}{কার্ল সেগান (Carl Sagan)}
একটি বইয়ের পাতায় এক নজর তাকালে আপনি অন্য ব্যক্তির কণ্ঠ শুনতে পান, সেই ব্যক্তি হয়তো ১০০০ বছর আগে মারা গিয়েছেন। বই-পড়ার মাধ্যমে সময়-ভ্রমণের সুযোগ হয়।
\end{chapquote}
\end{document}
目前,环境中没有出现孟加拉语文本chapquote
。此外,没有添加引文来源的选项。我希望该chapquote
环境具备以下功能:
- 允许在引文中使用两种字体。
mytype
仅在命令内的文本上激活英文字体\quotefont{}
。否则,文本应保留在选项中设置的文档默认字体latexbangla
。 - 保留引文作者姓名的默认字体
- 添加一个可选参数,用于以默认(斜体)字体在引文作者的下一行显示引文来源。其对齐方式应与引文作者相同。
使用上述功能,我希望以类似以下的方式使用环境:
আমার পছন্দের একটা উক্তি হলঃ \\
\begin{chapquote}{কার্ল সেগান (Carl Sagan)}{The source of the quote} % Quote Source should be optional
\quotefont{One glance at a book and you hear the voice of another person, perhaps someone dead for 1000 years. To read is to voyage through time.}
% The quote texts will be in the quotefont (mytype), but the quote author and source will be in defaut font.
\end{chapquote}
এটার বাংলা অনুবাদ করলে দাঁড়ায় এমনঃ \\
\begin{chapquote}{কার্ল সেগান (Carl Sagan)}
একটি বইয়ের পাতায় এক নজর তাকালে আপনি অন্য ব্যক্তির কণ্ঠ শুনতে পান, সেই ব্যক্তি হয়তো ১০০০ বছর আগে মারা গিয়েছেন। বই-পড়ার মাধ্যমে সময়-ভ্রমণের সুযোগ হয়।
% The quote texts, author and source all will be in defaut font.
\end{chapquote}
答案1
latexbangla
使用ucharclasses
Unicode 块转换机制来分配polyglossia
语言环境,这反过来意味着 chapquote 结构最终会以重叠环境而不是嵌套环境结束,因为space
它算作 latin 代码块的一部分。因此,错误消息不可避免。
长期解决方案是ucharclasses
通过将空格、标点和数字放入其自己的(逻辑)代码块中,稍微与 Unicode 代码块定义分离。
短期的解决方法是在 chapquote 环境中接管手动控制并分别执行ucharclasses
和polyglossia
功能。
幸运的是,只需考虑两种语言/文字。
这里,为了清楚地突出显示正在发生的事情,拉丁语引语字体为FreeSerif
紫色,孟加拉语引语字体为Charu_Chandan_3D_Unicode-Regular
蓝色。
环境经过修改,在进入拉丁文本和离开拉丁文本时以及进入孟加拉文本时,转换命令chapquote
中只包含字体命令。命令中没有环境声明。ucharclasses
polyglossia
ucharclasses
而是在英文引文周围手动添加\begin{latin}
。\end{latin}
在chapquote
环境之外,latexbangla
设置照常生效。
平均能量损失
% !TEX program = xelatex
\documentclass[12pt, oneside]{book}
\usepackage{xcolor}
%\usepackage{test_quote}
%vvvvv
\makeatletter
\RequirePackage[banglamainfont=Kalpurush, % Kalpurush font: https://www.omicronlab.com/bangla-fonts.html
banglattfont=Kalpurush,
]{latexbangla}
%activate polyglossia
\setdefaultlanguage[numerals=Bengali,
changecounternumbering=true]{bengali}
%++++++++++++++++++++++
\newfontfamily\qbengalifont[Renderer=HarfBuzz,Script=Bengali,AutoFakeBold=4.0,AutoFakeSlant=0.4]{Kalpurush}
\newfontface\bfont{\detokenize{Charu_Chandan_3D_Unicode-Regular}}[Extension=.ttf,
Path=C:/Windows/Fonts/,
Renderer=HarfBuzz,
Script=Bengali,
UprightFont=*,
Colour=blue,]
\newfontfamily\qfall{FreeSerif}[Colour=violet]
%\setTransitionsForLatin{\begin{latin}}{\end{latin}}
%\setTransitionsForLatin{}{}
%++++++++++++++++++++++++++++++++++++
%number all levels
% \setcounter{secnumdepth}{5}
% \setotherlanguage{english}
% new font for quotation
\newfontfamily\quotefont[%
% Scale= 1.1,
% WordSpace=1.4,
% AutoFakeSlant=1.2,
% AutoFakeBold=1.2
]{Noto Serif} % My Type Of Font font: https://www.1001freefonts.com/my-type-of-font.font
% A chapquote environment for chapter quotes
\newenvironment{chapquote}[2][2em]
{
\begingroup
\setlength{\@tempdima}{#1}%
\def\chapquote@author{#2}%
\parshape 1 \@tempdima \dimexpr\textwidth-2\@tempdima\relax%
% \uccoff \quotefont
\setTransitionsForLatin{\qfall}{\bfont}
%%\setTransitionsForBengali{\bfont}{\qfall}
\setTransitionTo{Bengali}{\bfont}
%\setTransitionTo{Latin}{\qfall}
}
{\par\medskip\hfill — %\uccoff — \uccon
\chapquote@author\hspace*{\@tempdima}\par\bigskip
\endgroup}
\makeatother
%^^^^^^^^^^^^^^^^
\begin{document}
আমার পছন্দের একটা উক্তি হলঃ
%\uccoff
\bigskip
\bigskip
\begin{chapquote}{কার্ল সেগান (Carl Sagan)}
\begin{latin}
One glance at a book and you hear the voice of another person, perhaps someone dead for 1000 years. To read is to voyage through time.
\end{latin}
\end{chapquote}
%\uccon
%\vspace{4em}
\bigskip
\bigskip
এটার বাংলা অনুবাদ করলে দাঁড়ায় এমনঃ
\bigskip
%\uccoff
\begin{chapquote}{কার্ল সেগান (Carl Sagan)}
%\setTransitionTo{Bengali}{\qbengalifont}
%\setTransitionTo{BasicLatin}{\qfall}
%\bfont
একটি বইয়ের পাতায় এক নজর তাকালে আপনি অন্য ব্যক্তির কণ্ঠ শুনতে পান, সেই ব্যক্তি হয়তো ১০০০ বছর আগে মারা গিয়েছেন। বই-পড়ার মাধ্যমে সময়-ভ্রমণের সুযোগ হয়।
\end{chapquote}
%\uccon
এটার বাংলা অনুবাদ করলে দাঁড়ায় এমনঃ
\end{document}
答案2
我没有使用/纠正环境,而是chapquote
通过创建两个自定义命令获得了所需的输出:
\qtext
更改为不同字体的命令\chapquote
引用结构命令
这是MWE:
测试_报价.sty
\setlength{\parindent}{0pt}
\RequirePackage[banglamainfont=Kalpurush, % Kalpurush font: https://www.omicronlab.com/bangla-fonts.html
banglattfont=Kalpurush,
]{latexbangla}
\setdefaultlanguage[numerals=Bengali,
changecounternumbering=true]{bengali}
\RequirePackage{lipsum}
\newfontfamily\quotefont[%
% Scale= 1.1,
% WordSpace=1.4,
% AutoFakeSlant=1.2,
% AutoFakeBold=1.2
]{[mytype]} % My Type Of Font font: https://www.1001freefonts.com/my-type-of-font.font
% Command for the different font
\newcommand\qtext[1]{{\normalfont \uccoff \quotefont #1 \uccon}}
% Command for the quote
\NewDocumentCommand\Chapquote{mmO{}}{
\begin{quotation}
\noindent \itshape{#1} \vspace*{-0.5\baselineskip}
\begin{flushright}
\textemdash \, \normalfont{#2} \\ \vspace*{-0.1\baselineskip}
\footnotesize\itshape{#3}
\end{flushright}
\end{quotation} }
测试_quote.tex
% !TEX program = xelatex
\documentclass[12pt, oneside]{book}
\usepackage{test_quote}
\begin{document}
আমার পছন্দের একটা উক্তি হলঃ
\chapquote{One glance at a book and you hear the voice of another person, perhaps someone dead for 1000 years. \qtext{To read is to voyage through time.}
}{কার্ল সেগান (Carl Sagan)}
[The Source of the quote]
এটার বাংলা অনুবাদ করলে দাঁড়ায় এমনঃ
\chapquote{একটি বইয়ের পাতায় এক নজর তাকালে আপনি অন্য ব্যক্তির কণ্ঠ শুনতে পান, সেই ব্যক্তি হয়তো ১০০০ বছর আগে মারা গিয়েছেন। বই-পড়ার মাধ্যমে সময়-ভ্রমণের সুযোগ হয়।
}{কার্ল সেগান (Carl Sagan)}
% [The Source of the quote] % as the quote source argument is supposed to be optional
\lipsum
\end{document}
我对这个自定义命令方法及其输出非常满意。但我仍然在寻求问题chapquote
环境的帮助,以便它可以生成类似的输出。