使用 lettrine 包处理多种情况的环境或命令

使用 lettrine 包处理多种情况的环境或命令

我编写了自己的命令,将首字母放大。

但后来我发现 lettrine 包可以做更多有趣的事情。现在我想要一个环境或一个命令来处理各种情况:

  1. 正常情况

  2. 仅包含一个字母的情况(灾难性退出)

  3. 包含先前内容的案例(例如数字)

  4. 带引号的案例,如果可能的话,将内容与 csquotes 包中的 \ textquote 合并

这是我的 EMV:

\documentclass[ebook,10pt,twoside,openright,showtrims]{memoir}
\usepackage{lipsum}
\usepackage{xcolor}  
\usepackage{lettrine}  
\newcommand*\ruleline[1]{\par\noindent\raisebox{.8ex}{\makebox[\linewidth]{{\color{red}\hrulefill}\hspace{1ex}\raisebox{-.8ex}{#1}\hspace{1ex}{\color{red}\hrulefill}}}}
\renewcommand\subsubsecheadstyle{\Large\noindent\ruleline}
\renewcommand{\LettrineFontHook}{\color{red}}

\newenvironment{body}{%
    \addvspace{\topsep}% Space above
}{%
    \unskip\par
    \addvspace{\topsep}% Space below
    %\needspace{15\baselineskip}
}


\begin{document}

    \begin{body}    
    \lettrine[findent=.3em]{A}{l} \lipsum[1] %1. normal case
    \end{body}  

    \begin{body}
    \lettrine[findent=.3em]{Y} \lipsum[2]] %2. case unique character (disaster)
    \end{body}  

    \begin{body}
    \lettrine[findent=.3em, ante={1. }]{C}{on} \lipsum[3] %3. case  with "ante" content (number)
                                                            
    \end{body}  
        
    \begin{body}
    \lettrine[findent=.3em, ante={"}]{Q}{uoted"} \lipsum[4] %4. case    with "ante" (quote)
                                                            %   who to combine with txtquote{} of csquotes package
    
\end{body}
            
\end{document}

这是输出:

在此处输入图片描述

我怎样才能自动使用 lettrine,以便或多或少地像这样进行调用:

  1. \mylt {A}{l} more text

  2. \mylt {Y} more text and correction of the disaster on this case

  3. \mylt {1. }{C}{on} more text (here 1. is the content for "ante"

  4. \mylt ****No idee how to manage the quotes and combine with csquotes

答案1

我可以使用以下命令来完成此操作:

\makeatletter
\def\ltr{\@ifnextchar[{\@with}{\@without}}
\def\@with[#1]#2{\lettrine[findent=.3em, ante={#1}]{#2}}
\def\@without#1{\lettrine[findent=.3em]{#1}}
\makeatother

通过这种方式,我可以简化我对 lettrine 的使用,根据所暴露的不同情况,在源代码中写入以下内容:

\ltr {A}{b}

\ltr [For ant=] {A}{b}

 ... etc

对于这种情况textquote{},由于对于我有限的知识来说它似乎很复杂,所以我选择直接在文本中放置开始和结束引号的类型。

解决方案的一个示例:

\documentclass[ebook,8pt,twoside,openright,showtrims]{memoir}
\usepackage{lipsum}
\usepackage{xcolor}  
\usepackage{lettrine}  
\usepackage{csquotes} 

\setulmarginsandblock{1.5cm}{1.5cm}{*}
\setlrmarginsandblock{4cm}{1.5cm}{*}
\checkandfixthelayout

\renewcommand{\LettrineFontHook}{\color{red}}

\newenvironment{body}{%
    \addvspace{\topsep}% Space above
}{%
    \unskip\par
    \addvspace{\topsep}% Space below
    %\needspace{15\baselineskip}
}

\makeatletter
\def\ltr{\@ifnextchar[{\@with}{\@without}}
\def\@with[#1]#2{\lettrine[findent=.3em, ante={#1}]{#2}}
\def\@without#1{\lettrine[findent=.3em]{#1}}
\makeatother

\begin{document}
    
\begin{body}        

\ltr{A}{l} \lipsum[1]                 %1. normal case

\ltr{Y}{} \lipsum[2]                  %2. case unique character (thanks @DG')

\ltr[1. ]{C}{on} \lipsum[3]           %3. case with "ante"

\ltr[«]{Q}{uoted»} \lipsum[4]         %4. case with quotes, the same solution for case 3

\end{body}
            
\end{document}

输出:

在此处输入图片描述

相关内容