
를 사용하면 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-02-03). 5.2a 이전 릴리스에 대한 분석 및 해결 방법은 다음과 같습니다.
\tracingall
내부에 '마커'를 적용하거나 배치하면 \mkblockquote
해당 케이스에서는 절대로 실행되지 않음이 드러납니다 beamer
. 그 이유는 csquotes
TeX가 의 일부로 표시 자료를 생성하기 위한 '적절한' 모드에 있는지 확인하기 때문입니다 \blockquote
. 해당 테스트가 실패하면 인용문이 텍스트 인용문으로 설정됩니다.
에서 사용하는 테스트는 기본 구문 내부 와 (중요하게) 또는 의 단락 시작 부분에서 적용되는 csquotes
기본 입니다 . (TeX는 각각 제한된 수평 모드와 제한된 수직 모드입니다.) 프레임은 수직 상자로 생성되므로 프레임에 배치된 첫 번째 자료는 정확히 후자의 조건을 갖습니다. 이는 문맥을 표시하기에 '부적절'하다고 보고 텍스트 경로로 내려간다는 것을 의미합니다 .\ifinner
\hbox
\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