大引号的区块引用,开头的引言在底部

大引号的区块引用,开头的引言在底部

我想适应带大引号的块引用像我的母语德语这样的语言,还有一些其他主要是日耳曼语和斯拉夫语的语言(参见维基百科:引号的非英语用法),开盘报价位于底部。

基于Andrew Stacey 的回答以及 Werner Grundlingh 提出的引号符号的想法如何创建引言?我得到了如下所示的解决方案。

我的问题是:
我该如何改进此代码?就目前情况而言,字体更改时必须更改所有金额,有时需要手动更正,这必须依靠经验;要看到一些奇怪的效果,请注释掉下面环境的可选question(这与使用无关\blindtext;我在实际使用中也遇到过这种情况,这实际上是引入校正值的原因)above。此外,移入和移出的数量below必须不同。至少开盘报价似乎并不总是完全相同,参见第一个和第二个示例。

也许你也有基于不同方法的想法。例如,也许有一种方法mdframed,因为我无论如何都会使用它?

该环境的名称来源于这样的事实:其最初的用途仅用于提问。

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{kpfonts}% package with fonts of Kepler project
% loads also package "textcomp"

\usepackage[ngerman]{babel}% new German spelling

\usepackage[svgnames]{xcolor}
  \definecolor{framecolor}{named}{SteelBlue}
  \colorlet{framebgcolor}{PowderBlue!50!White}
  \definecolor{quotesignclr}{named}{LightSlateGrey}

\usepackage{changepage}% not needed with "memoir" and KOMA-Script classes or package "scrextend"

\usepackage{calc,etoolbox,environ,graphicx}

\usepackage[pangram]{blindtext}% for dummy text, needs "babel"

\usepackage{showframe}% just for showing the text margins

\usepackage{tikz}
  \usetikzlibrary{backgrounds,positioning}

% based on answer of Andrew Stacey in https://tex.stackexchange.com/a/28418/9237
% model for quotes: Werner Grundlingh in https://tex.stackexchange.com/a/45828/9237
\newlength{\bodywidth}
\newlength{\testwidth}
\newlength{\nodewidth}
\newcommand*{\openingquote}{\llap{\smash{\makebox[1em][r]{\quotedblbase\hspace*{0.1em}}}}}
\newcommand*{\closingquote}{\rlap{\smash{\makebox[1em][l]{\hspace*{0.1em}\textquotedblleft}}}}
%-----%
\NewEnviron{question}[1][0pt]%
{\begingroup
\settowidth{\bodywidth}{\itshape\BODY}
\setlength{\testwidth}{2.5em+0.6pt+\bodywidth}% 2.5em = 2*inner frame xsep;
                                              % 0.6pt = 2*line width+2*inner sep
\begin{adjustwidth}{3em}{3em}% with KOMA-Script use environment "addmargin" instead
\ifdimcomp{\testwidth}{<}{\linewidth}% "\ifdimcomp" provided by "etoolbox"
  %true:
  {\setlength{\nodewidth}{\bodywidth}\addtolength{\nodewidth}{-#1}}%
  %false:
  {\setlength{\nodewidth}{\linewidth}\addtolength{\nodewidth}{-2.5em-0.6pt-#1}}
\begin{tikzpicture}
    [background rectangle/.style={draw=framecolor,line width=0.2pt,fill=framebgcolor,rounded corners},
     show background rectangle,inner frame xsep=1.25em,inner frame ysep=0.5em]
% body text
  \node[text width=\nodewidth ,align=justify,inner sep=0.1pt] (TXT) {\itshape\BODY};
% opening quote
  \node[overlay,scale=2,text=quotesignclr,inner sep=0.1pt,above=0.25ex of TXT.south west]
       (OpQ) {\openingquote};
%closing quote
  \node[overlay,scale=2,text=quotesignclr,inner sep=0.1pt,below=2.75ex of TXT.north east]
       (ClQ) {\closingquote};
\end{tikzpicture}
\end{adjustwidth}}[\endgroup]

\begin{document}

% German quote signs --> German dummy text

\begin{question}
% text is extracted from package "blindtext"
Dies hier ist ein Blindtext zum Testen von Textausgaben.
Wer diesen Text liest, ist selbst schuld.
\end{question}

\begin{question}
\blindtext[1]
\end{question}

\begin{question}[-0.7em]
\blindtext[1]
\end{question}

\begin{question}[-5em]
\blindtext[1]
\end{question}

\begin{question}
\blindtext[1]
\end{question}

\begin{question}[10.6em]
\blindtext[1]
\end{question}

\end{document}

答案1

这是使用一些低级命令的提议。文本以 a 排版\vtop,其深度用于放置开头的引号,而结尾的引号将与顶行齐平(由于尺寸原因会降低一些)。

感谢 Jake,我已经能够解决一个困扰我的谜团,关于一个似乎是必要的间距,这是由于inner sepTikZ 节点造成的。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{kpfonts}
\usepackage[svgnames]{xcolor}
  \definecolor{framecolor}{named}{SteelBlue}
  \colorlet{framebgcolor}{PowderBlue!50!White}
  \definecolor{quotesignclr}{named}{LightSlateGrey}
\usepackage{changepage}
\usepackage{environ,graphicx}
\usepackage{tikz}
\usetikzlibrary{backgrounds}

\newcommand\sopeningquote{\scalebox{2}{\color{quotesignclr}\smash\quotedblbase}}
\newcommand\sclosingquote{\scalebox{2}{\color{quotesignclr}\smash\textquotedblleft}}

\makeatletter
\newsavebox\simplequestbox
\NewEnviron{simplequest}{%
  \normalfont
  \begin{adjustwidth}{3em}{3em}
  \settowidth{\dimen@}{\sopeningquote\kern.4em\sclosingquote}%
  \dimen@=\dimexpr\linewidth-\dimen@\relax
  \setbox\simplequestbox=\vtop{
    \@parboxrestore\itshape
    \hsize=\dimexpr\dimen@-\pgfkeysvalueof{/pgf/inner xsep}*2\relax % thanks, Jake
    \sbox\z@{\BODY}
    \ifdim\wd\z@>\hsize
      \noindent\BODY\par
    \else
      \box\z@
    \fi    
    \xdef\simplequestpd{\the\prevdepth}
  }
  \begin{tikzpicture}
    [background rectangle/.style={draw=framecolor,line width=0.2pt,
     fill=framebgcolor,rounded corners}, show background rectangle,
     inner frame xsep=-2pt,inner frame ysep=2pt]
    \node {\mbox{%
      \raisebox{\dimexpr-\dp\simplequestbox+\simplequestpd+.05ex}
        [0pt][0pt]{\sopeningquote}%
      \kern.2em
      \box\simplequestbox
      \kern.2em
      \raisebox{-1.4ex}[0pt][0pt]{\sclosingquote}}};
  \end{tikzpicture}
  \end{adjustwidth}
}
\makeatother
\begin{document}

\begin{simplequest}
Dies hier ist ein Blindtext zum Testen von Textausgaben.
Wer diesen Text liest, ist selbst schuld.
\end{simplequest}

\begin{simplequest}
Dies hier ist ein Blindtext
\end{simplequest}

\Large
\begin{simplequest}
Dies hier ist ein Blindtext zum Testen von Textausgaben.
Wer diesen Text liest, ist selbst schuld.
\end{simplequest}

\end{document}

图中类似的引语是:顶部是我的,底部是你的。

在此处输入图片描述


如果文本包含多个段落,并且第一个段落的长度不足以填满一行,则可能会出现问题。 如果文档中出现这种情况,则代码可能会更改如下:

\makeatletter
\newsavebox\simplequestbox
\NewEnviron{simplequest}[1][]{%
  \normalfont
  \begin{adjustwidth}{3em}{3em}
  \settowidth{\dimen@}{\sopeningquote\kern.4em\sclosingquote}%
  \dimen@=\dimexpr\linewidth-\dimen@\relax
  \setbox\simplequestbox=\vtop{
    \@parboxrestore\itshape
    \hsize=\dimexpr\dimen@-\pgfkeysvalueof{/pgf/inner xsep}*2\relax % thanks, Jake
    \if\relax\detokenize{#1}\relax
      \sbox\z@{\BODY}
      \ifdim\wd\z@>\hsize
        \noindent\BODY\par
      \else
    \box\z@
      \fi
    \else
      \sbox\z@{#1}
      \hsize\wd\z@
      \BODY\par
    \fi
    \xdef\simplequestpd{\the\prevdepth}
  }
  \begin{tikzpicture}
    [background rectangle/.style={draw=framecolor,line width=0.2pt,
     fill=framebgcolor,rounded corners}, show background rectangle,
     inner frame xsep=-2pt,inner frame ysep=2pt]
    \node {\mbox{%
      \raisebox{\dimexpr-\dp\simplequestbox+\simplequestpd+.05ex}
        [0pt][0pt]{\sopeningquote}%
      \kern.2em
      \box\simplequestbox
      \kern.2em
      \raisebox{-1.4ex}[0pt][0pt]{\sclosingquote}}};
  \end{tikzpicture}
  \end{adjustwidth}
}
\makeatother

环境现在有一个可选参数,即第一行短线;这是一个例子:

\begin{simplequest}[Dies hier ist ein Blindtext.]
Dies hier ist ein Blindtext.

Wer diesen Text liest, ist selbst schuld.
\end{simplequest}

在此处输入图片描述

可以尝试仅获取第一段,但这可能容易出错。

相关内容