配置双语写作的引用环境

配置双语写作的引用环境

我正在尝试在书籍类中配置双语(孟加拉语+英语)引用环境。对于以下 MWE,我使用这些字体:

  1. 卡尔普鲁什(下载源代码)
  2. 我的字体类型(下载源代码)

(第二个可以用任何熟悉的英文字体替换。)

测试_报价.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使用ucharclassesUnicode 块转换机制来分配polyglossia语言环境,这反过来意味着 chapquote 结构最终会以重叠环境而不是嵌套环境结束,因为space它算作 latin 代码块的一部分。因此,错误消息不可避免。

长期解决方案是ucharclasses通过将空格、标点和数字放入其自己的(逻辑)代码块中,稍微与 Unicode 代码块定义分离。

短期的解决方法是在 chapquote 环境中接管手动控制并分别执行ucharclassespolyglossia功能。

幸运的是,只需考虑两种语言/文字。

chapquote 示例

这里,为了清楚地突出显示正在发生的事情,拉丁语引语字体为FreeSerif紫色,孟加拉语引语字体为Charu_Chandan_3D_Unicode-Regular蓝色。

环境经过修改,在进入拉丁文本和离开拉丁文本时以及进入孟加拉文本时,转换命令chapquote中只包含字体命令。命令中没有环境声明。ucharclassespolyglossiaucharclasses

而是在英文引文周围手动添加\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通过创建两个自定义命令获得了所需的输出:

  1. \qtext更改为不同字体的命令
  2. \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}

输出如下: 我的 MWE 输出

我对这个自定义命令方法及其输出非常满意。但我仍然在寻求问题chapquote环境的帮助,以便它可以生成类似的输出。

相关内容