
對於 csquotes
,預設情況下,長整型的(可選)引用\blockquote
緊接在引用本身之後。如果你想在下一行引用引文,並向右對齊,你可以這樣做
\renewcommand{\mkblockquote}[4]{#1#2\par\hfill#4#3}
在標準類中效果很好:
\documentclass{article}
\usepackage{csquotes,lipsum}
\renewcommand{\mkblockquote}[4]{#1#2\par\hfill#4#3}
\begin{document}
\blockquote[Some Bloke][]{\lipsum*[2]}
\end{document}
但是,beamer
這不起作用,\mkblockquote
據我所知,重新定義沒有效果。有什麼方法可以讓這個在beamer
框架中運作嗎?
MWE,注意位置(某個傢伙)與上面的例子相比article
:
\documentclass{beamer}
\usepackage{csquotes,lipsum}
\renewcommand{\mkblockquote}[4]{#1#2\par\hfill#4#3}
\begin{document}
\begin{frame}
\blockquote[Some Bloke][]{\lipsum*[2]}
\end{frame}
\end{document}
(順便說一句,我當然知道我不需要csquotes
這樣引用,所以答案是這樣的“拋棄\blockquote
並使用\lipsum*[2]\par\hfill(Some Bloke)
”是不是都很有趣。
答案1
這是由於一個錯誤造成的,csquotes
該錯誤已修復版本5.2a(發布日期2017年2月3日)。 5.2a 之前版本的分析和解決方法如下。
應用\tracingall
或在內部放置“標記”\mkblockquote
將表明它從未在該beamer
情況下執行。原因是csquotes
檢查 TeX 是否處於“適當”模式來創建顯示材料作為\blockquote
.如果該測試失敗,則引用將設定為文字引用。
使用的測試csquotes
是原語\ifinner
,在原語構造內部以及(至關重要的) a或\hbox
中的段落開頭都是如此。 (TeX 分別處於受限水平模式和受限垂直模式。)框架是在垂直框中創建的,因此放置在框架中的第一個材質恰好具有後一種條件。這意味著將上下文視為“不適合”顯示並沿著文字路線走下去。\vbox
\vtop
beamer
csquotes
我們可以使用\leavevmode
(或一系列其他水平模式命令)將垂直模式退出到不受限制的水平模式,這將解決該問題。
\documentclass{beamer}
\usepackage{csquotes,lipsum}
\renewcommand{\mkblockquote}[4]{#1#2\par\hfill#4#3}
\begin{document}
\begin{frame}
\leavevmode
\blockquote[Some Bloke][]{\lipsum*[2]}
\end{frame}
\end{document}
在這種article
情況下,TeX 處於無限制的垂直模式(主要垂直清單)\blockquote
遇到時\ifinner
為 false,並選擇區塊引用路由。
有缺陷的程式碼是
\long\def\csq@bquote#1#2#3#4#5#6{%
\csq@ifnested
{\csq@err@nbquote}
{\csq@getpunct{%
\ifbool{inner}
{\csq@bquote@ii}
{\ifbool{csdisplay}
{\csq@bquote@i}
{\iftoggle{csq@parbox}\csq@bquote@ii\csq@bquote@i}}%
{#1}{#2}{#3}{#4}{#5}{#6}}}}
故障線路在哪裡\ifbool{inner}
。如前所述,這在水平模式和垂直模式框中都是如此。替換為
\ifboolexpr{ bool {inner} and bool {hmode} }
修復了這個問題,因為它現在只在\hbox
.此修復使內部記錄的行為\parbox
與設定 時類似地處於活動狀態csq@parbox
,同時beamer
使用「原始」\vbox
框架,現在它的工作方式與主垂直清單相同。
人們可以etoolbox
在等待更新的同時修補有缺陷的程式碼:
\makeatletter
\patchcmd{\csq@bquote}{\ifbool{inner}}{\ifboolexpr{ bool {inner} and bool {hmode} }}
{}{}
\makeatother