我正在构建一个命令来标记长文本并将它们分类到我的文档的其他部分(在马利皮沃的帮助下)。我设法用collect
、multido
和mdframed
包做到了这一点。的一大优点mdframed
是您可以轻松处理文本在多个页面上的四种可能切割:单个、第一部分、中间部分或第二部分。这对于自动命令来说是非凡的。
所以,现在我有一个无法独自解决的问题:
- 在这些机会之后,我想用花括号改变左行:就像交响乐谱或狄德罗百科全书中的旧花括号一样,花括号从标记文本的顶部开始并向下...(事实上,我会使用钩子、括号或角度来,就像 Andrew Swann 在这里的回答一样并且具有不同的级别就像第一个 Qrrbrbirlbel 的答案一样,但带有更经典的括号样式)。
这里还有另外两个不太重要的问题,但如果你找到简单的解决方案……:
mdframed
如何在 选项中工作tikz
(也许我不需要tikz
)?我只使用左边距,但我宁愿使用外边距……是否存在双面模式男人 p.9,但我不知道如何使用。- 使用 时
mdframed
,我不在实际页边距中工作,而是始终在文本宽度中工作。我想将线条、标记文本、括号等放在实际页边距之外,而不会影响文本的宽度。有什么想法吗?
这是我的 MWE (对于tikz
,我使用第三个文档 p.5 的示例 5,名为:在第 1 行定位特定符号,但也许我不需要tikz
我想要的东西?):
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = arara
\documentclass{scrbook}
\usepackage{fontspec,collect,multido,lipsum}
\newcounter{extrait}\newcounter{fiche}% for my automatic command
\usepackage[framemethod=tikz,usetwoside]{mdframed}
\usetikzlibrary{calc,arrows}
\tikzset{warningsymbol/.style={rectangle, fill=white, scale=1, overlay}}
% here begin my automatic command using collect, counter, & mdframed
\newcommand\histoire[2]{\addtocounter{fiche}{1}\definecollection{his\thefiche}
\def\histo{\path let \p1=(P), \p2=(O) in ($(\x2,0)+{0.5}*(-1,\y1)$)}% this is my use of TIKZ (\histo is to simplify later)
\mdfsetup{hidealllines=true, leftline=true, leftmargin=0em,innertopmargin=0em, innerbottommargin=0em, innerrightmargin=1.5em, innerleftmargin=0.5em,%
firstextra={\histo node[warningsymbol] {\rotatebox[origin=c]{90}{#1 …}};},%
secondextra={\histo node[warningsymbol] {\rotatebox[origin=c]{90}{… #1}};},%
middleextra={\histo node[warningsymbol] {\rotatebox[origin=c]{90}{… #1 …}};},%
singleextra={\histo node[warningsymbol] {\rotatebox[origin=c]{90}{#1}};}}
\begin{mdframed}
{\begin{collect*}{his\thefiche}{}{}{\minisec{Extrait \addtocounter{extrait}{1}\theextrait : #1}}{}#2\end{collect*}}
\end{mdframed}}% end of my command
\begin{document}
\chapter{Tests}
\histoire{A}{\lipsum[1-3]}\lipsum[4]
\histoire{B}{\lipsum[5-7]}\lipsum[8]
\histoire{C}{\lipsum[9-16]}
\chapter{Restitutions}
\multido{\i=0+1}{\thefiche}{\setcounter{fiche}{1}\addtocounter{fiche}{\i}\includecollection{his\thefiche}}
\end{document}
% arara: xelatex
% arara: xelatex
这是实际情况(红色部分,我希望在第一页上有一个示例,想象一下在第二页有一个类似的括号,更长):
答案1
这是一个使用选项tcolorbox
而不是mdframed
;这个版本满足了所有三个要求:
- 使用大括号。
- 括号位于外边缘。
- 该框的宽度等于
\textwidth
;括号位于边距区域。
代码:
\documentclass{scrbook}
\usepackage{fontspec,collect,multido,lipsum}
\usepackage{changepage}
\strictpagecheck
\newcounter{extrait}
\newcounter{fiche}
\usepackage[framemethod=tikz,usetwoside]{mdframed}
\usepackage[many]{tcolorbox}
\usetikzlibrary{calc,arrows,decorations.pathreplacing}
\newtcolorbox{tcbdecor}[1]{
check odd page,
breakable,
colback=white,
boxrule=0pt,
colframe=white,
arc=0pt,
outer arc=0pt,
top=0pt,
bottom=0pt,
enhanced jigsaw,
oversize,
overlay={
\ifoddpage
\draw[decoration=brace,decorate,line width=1pt]
(frame.north east) -- node[rotate=270,above=4pt] {... #1 ...} (frame.south east);
\else
\draw[decoration={brace,mirror},decorate,line width=1pt]
(frame.north west) -- node[rotate=90,above=4pt] {... #1 ...} (frame.south west);
\fi
},
}
\newcommand\histoire[2]{%
\addtocounter{fiche}{1}%
\definecollection{his\thefiche}%
\begin{tcbdecor}{#1}
\begin{collect*}%
{his\thefiche}{}{}%
{\minisec{Extrait \addtocounter{extrait}{1}\theextrait : #1}}
{}
#2
\end{collect*}%
\end{tcbdecor}%
}
\begin{document}
\chapter{Tests}
\histoire{A}{\lipsum[1-3]}\lipsum[4]
\histoire{B}{\lipsum[5-7]}\lipsum[8]
\histoire{C}{\lipsum[9-16]}
\chapter{Restitutions}
\multido{\i=0+1}{\thefiche}{\setcounter{fiche}{1}\addtocounter{fiche}{\i}\includecollection{his\thefiche}}
\end{document}
结果:
放大的图像显示奇数页上的一个框:
放大的图像显示偶数页上的一个框:
如果你想要括号,只需将overlay
部分更改为
overlay={
\ifoddpage
\draw[line width=1pt]
([xshift=-5pt]frame.north east) -- (frame.north east) -- node[rotate=270,above=4pt] {... #1 ...} (frame.south east) -- ([xshift=-5pt]frame.south east);
\else
\draw[line width=1pt]
([xshift=5pt]frame.north west) -- (frame.north west) -- node[rotate=90,above=4pt] {... #1 ...} (frame.south west) -- ([xshift=5pt]frame.south west);
\fi
},
通过上面的例子,现在可以得到
在奇数页上,并且
在偶数上。