编辑

编辑

的一大特色csquotes是,使用\MakeAutoQuote,我们可以简单地输入正确的硬编码引号并完成csquotes剩下的工作,即将它们转换为正确的格式(由语言、字体等定义),并处理嵌套:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[english]{babel}
\usepackage[babel]{csquotes}
\usepackage{lipsum}

\MakeAutoQuote{»}{«}
\MakeAutoQuote*{›}{‹}

\begin{document}
\lipsum*[1]
»\lipsum*[2] »[...]««
\lipsum*[3]
\blockquote{\lipsum*[2] »[...]«}
\end{document}

在我的文档中,我只使用»+«+ (放在键盘上容易触及的位置),无论我用什么语言书写,无论引号在打印时需要是什么样子。Csquotes都会将它们视为\enquotes。这很完美……除非我们谈论的是较长的引文,我们希望它自动转换为块格式。我想要一个更智能的自动引文,它的行为像\blockquote而不是\enquote,即,如果预期长度达到某个阈值,它将切换到块格式。这样,我就可以在整个文档中统一使用»和,«而不必手动考虑引文的长度。

不幸的是,\MakeAutoQuote似乎与 csquotes 文档的链接相当\enquote紧密(§4.1)。有什么方法可以改变这种情况,目前我还不知道有哪些陷阱吗?

跟进

受@cfr 和 Ulrike 的回复启发,我想到了一个可能被一些人认为有点肮脏的解决方法(这个想法)。如果我们可以使用 来\mkblockquote定义块引用的精确格式,为什么不改变我们活动的块引用字符的功能(例如»«开始之后块引用的每个实例——成为块引用中的活动文本引用字符?并在最后将块引用功能归还给他们?

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[english]{babel}
\usepackage[babel]{csquotes}
\usepackage{lipsum}

% define » and « to trigger a block quote
\MakeBlockQuote{»}{|}{«}

\renewcommand{\mkblockquote}[4]{%
% inside a block quote, make them trigger a text quote
\MakeAutoQuote{»}{«}%
#1#2#3#4%
% now they resume functioning as block quote triggers again
\MakeBlockQuote{»}{|}{«}
}%

\begin{document}
\lipsum*[1]
»\lipsum*[2]«
»\lipsum*[2] »[...]««
\lipsum*[3]

\end{document}

显然,它的工作方式并非如此。我曾希望\MakeBlockQuote它能像 那样工作\renewcommand,但csquotes似乎不接受对活动 blockquote 字符的重新定义。即使这种构造也会导致“无效参数错误”:

\MakeBlockQuote{»}{|}{«}
\MakeBlockQuote{>}{|}{<}

就好像一旦定义,块引号就与这些字符密不可分了。或者我们有什么办法可以让它以某种方式工作?

答案1

也许我遗漏了什么,但为什么不定义要使用的活动字符\MakeBlockQuote呢?我猜这不允许您具体指定内部/外部标记,但如果csquotes无论如何都要处理嵌套,也许这不是什么大问题。(我定义了外部和内部,但实际上从未使用过内部标记,原因就在于此。)

\documentclass[british]{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage{csquotes}
\usepackage{kantlipsum}
\MakeBlockQuote{<}{|}{>}
\begin{document}

  \kant[2]
  <\kant[1]>

  \kant[3]

  Some more text. <This is a short quote.>
  `This is another short quote.'

\end{document}

自动报价?

最后的简短引述只是为了比较。

编辑

Ulrike Fischer 指出你不能嵌套块引用csquotes(但你可以嵌套常规 LaTeX 块引用)。

您可以做的是将上述方法与常规活动引号字符的使用结合起来,这样csquotes就可以正确地找出嵌套。这是否是一个重大的限制可能取决于您所做的工作类型。如果您经常需要排版包含其他块引用的块引用,这显然不是一个好的解决方案。如果这种情况相对罕见,也许就没那么好了。

\documentclass[british]{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage{csquotes}
   \MakeAutoQuote{‘}{’}
   \MakeAutoQuote*{“}{”}
\usepackage{kantlipsum}
\MakeBlockQuote{<}{|}{>}
\begin{document}

  \kant[2]
  <\kant[1]>

  \kant[3]

  Some more text. <This ‘is’ a short quote.>
  `This is another short quote.'

\end{document}

半自动嵌套

相关内容