如何在不设置新环境的情况下更改 verse 环境中的字体样式?

如何在不设置新环境的情况下更改 verse 环境中的字体样式?

这是一个相关问题:

如何在 verse 环境中改变字体大小?

虽然这个答案效果很好,但它确实创建了一个Verse没有包固有功能的新环境verse。对于 LyX 来说,实现起来会很麻烦。

我想知道,是否有一种方法可以在序言中定义字体样式(字体大小、行距、样式等),同时保留所有固有属性verse?这样可以保持 LyX 界面整洁,并且仍然可以通过序言进行修改。

ps. 我尝试了\renewenvironment简单的\selectfont,它似乎具有erase诗歌功能。

答案1

与 Werner 的解决方案不同,此解决方案不重写整个环境。以下是前言:

\newcommand{\versefont}{\itshape} % put here whatever font commands you want
\let\myoldverse\verse % now we store the original {verse}
\def\verse{\versefont\myoldverse} % and new {verse} just uses the font and original {verse}

答案2

如果您使用标准文档类之一,则只需将以下内容添加到 LaTeX 前言中:

\makeatletter
\newcommand{\versefont}{}
\renewenvironment{verse}
               {\let\\\@centercr
                \list{}{\itemsep      \z@
                        \itemindent   -1.5em%
                        \listparindent\itemindent
                        \rightmargin  \leftmargin
                        \advance\leftmargin 1.5em}%
                \item\relax\versefont}
               {\endlist}
\makeatother

这将允许您重新定义\versefont在序言中或通过正文使用 ERT 进行字体选择。

如果你使用verse包裹,那么你的序言应该如下所示,以便实现相同的效果:

\usepackage{verse}
\makeatletter
\newcommand{\versefont}{}
\renewenvironment{verse}[1][\linewidth]{
  \stepcounter{verse@envctr}%
  \setcounter{poemline}{0}\refstepcounter{poemline}%
  \setcounter{vslineno}{1}%
  \let\\=\@vscentercr
  \list{}{\itemsep \z@
          \itemindent  -\vindent%
          \listparindent\itemindent
          \parsep       \stanzaskip
          \ifdim #1 < \linewidth
            \rightmargin        \z@
            \setlength{\leftmargin}{\linewidth}%
            \addtolength{\leftmargin}{-#1}%
            \addtolength{\leftmargin}{-0.5\leftmargin}%
          \else
            \rightmargin        \leftmargin
          \fi
          \addtolength{\leftmargin}{\vindent}%
          \versefont}
  \item[]}{\endlist}
\makeatother

上面的代码只是verse从中获取了环境定义verse.dtx并插入\versefont(定义为空)。

相关内容