我如何分发下面的图片,以便
- 它打印在两张 A4 横向纸上
- 中心 1cm 重复(即第一页最右边的 cm 等于第二页最左边的 cm)
\documentclass{article}
\usepackage[a4paper,margin=.5cm,landscape]{geometry}
\usepackage{etex}
\usepackage{tikz}
\usepackage{musixtex}
\def\threedp#1{\pgfmathparse{#1}\expandafter\Threedp\pgfmathresult0000@}
\def\Threedp#1.#2#3#4#5@{#1.#2#3#4}
\begin{document}
\pgfdeclarelayer{blacknotes}
\pgfsetlayers{main,blacknotes}
\tikzset{tight fit/.style={inner sep=0pt, outer sep=0pt}}
\begin{tikzpicture}
\def\lastnotenodename{clefs}
\node [text width=1cm, tight fit] (clefs) at (0,0) {
\begin{music}
\instrumentnumber{1}
\instrumentnumber{2}
\nostartrule
\setstaffs1{1}
\setstaffs2{1}
\setclef1{\bass}
\setclef2{\treble}
\startextract
\hskip2.0\elemskip
\zendextract
\end{music}
};
\foreach \note [
evaluate={
\n=int(mod(\note-1, 12));
\octave=int((\note+8)/12);
\t=int(floor((\note-1)/12)*7-7);
\notename={"A","","B","C","","D","","E","F","","G",""}[\n];
\tonicsolfa={"la","","si","so","","r\`e","","mi","fa","","sol",""}[\n];
\blacknote={0,1,0,0,1,0,1,0,0,1,0,1}[\n];
\frequency=(2^((\note-49)/12))*440;}
] in {1,...,88}{
\ifnum\octave>3
\tikzset{extract anchor/.style={anchor=south west, at=(\lastnotenodename.south east)}}
\else
\tikzset{extract anchor/.style={anchor=north west, at=(\lastnotenodename.north east)}}
\fi
\ifnum\blacknote=0
\edef\notenodename{\notename_\octave}
\node (\notenodename) [tight fit,text width=1cm, extract anchor/.try] {%
\begin{music}
\instrumentnumber{1}
\instrumentnumber{2}
\nostartrule
\setstaffs1{1}
\setstaffs2{1}
\setclefsymbol1{\empty}
\setclefsymbol2{\empty}
\setclef1{\bass}
\setclef2{\treble}
\startextract
\transpose\t
\hskip-1.5\elemskip
\ifnum\octave>3
\ifnum\octave>4
\Notes \nextinstrument \ql{\notename} \en
\else
\Notes \nextinstrument \qu{\notename} \en
\fi
\else
\ifnum\octave>2
\Notes \ql{\notename} \en
\else
\Notes \qu{\notename} \en
\fi
\fi
\zendextract
\end{music}
};
\xdef\lastnotenodename{\notenodename}
\node [anchor=base] (sol-fa) at (\notenodename |- 0,-3) {\tonicsolfa$_\octave$};
\draw (\notenodename.south west |- 0,-4) rectangle ++(1, -4);
\node [rotate=90, font=\footnotesize, anchor=east]
at (\notenodename.north |- 0,-4) {\threedp\frequency};
\node [font=\footnotesize, anchor=south]
at (\notenodename.south |- 0,-8) {\note};
\node [font=\footnotesize, anchor=south]
at (\notenodename.south |- 0,-8.5) {\notename$_\octave$};
\draw (\notenodename.south west |- sol-fa.south)
rectangle (\notenodename.south east |- 0,1.125); %0.125 by trial and error
\else
\begin{pgfonlayer}{blacknotes}
\fill ([xshift=-0.25cm]\lastnotenodename.north east |- 0,-4) rectangle ++(0.5, -2.5);
\node [rotate=90, text=white, font=\footnotesize, anchor=east]
at (\lastnotenodename.north east |- 0,-4) {\threedp\frequency};
\end{pgfonlayer}
\fi
}
\node [rotate=90] at (0,-6) {Fr\`equency (Hz)};
\end{tikzpicture}
\end{document}
代码来自钢琴的音域:键盘与五线谱。
答案1
使用collectbox
和trimclip
我们可以以更通用的方式实现您想要的功能,即针对任何框。我添加了一些可选参数以进行额外的剪辑(例如,用于处理超出其边界框的内容)。
\documentclass{scrbook}
\usepackage{mwe}
\usepackage{trimclip}
\usepackage{xparse}
\makeatletter
\newcommand\doublepagesplitoverlap{1cm}
\NewDocumentCommand\doublepagesplit{
O{\doublepagesplitoverlap} % overlap
D||{0pt} % clip left
D||{#2} % clip right
D!!{0pt} % clip top
D!!{#4} % clip bottom
}{%
\cleardoubleevenpage\leavevmode\vfil
\flushright
\collectbox{%
\@doublepagesplit
{#2}{#4}%
{\dimexpr (\width - #1) / 2\relax}%
{#4}{#5}%
}%
}
\newcommand\@doublepagesplit[5]{%
\clipbox{{#1} {#2} {#3} {#5}}{\BOXCONTENT}%
\clearpage\leavevmode\vfil
\flushleft
\clipbox{{#3} {#2} {#4} {#5}}{\BOXCONTENT}%
\clearpage
}
\makeatother
\begin{document}
\doublepagesplit{\includegraphics{example-image}\relax}
\end{document}
将其放入你的文档(并复制 KOMA-Script 的\cleardoubleevenpage
)我们得到
\documentclass{article}
\usepackage[a4paper,margin=.5cm,landscape]{geometry}
\usepackage{tikz}
\usepackage{musixtex}
\usepackage{trimclip}
\usepackage{xparse}
\def\threedp#1{\pgfmathparse{#1}\expandafter\Threedp\pgfmathresult0000@}
\def\Threedp#1.#2#3#4#5@{#1.#2#3#4}
\makeatletter
\newcommand*\cleardoubleevenpage{%
\clearpage
\if@twoside\ifodd\c@page
\hbox{}\newpage\if@twocolumn\hbox{}\newpage\fi
\fi\fi
}
\newcommand\doublepagesplitoverlap{1cm}
\NewDocumentCommand\doublepagesplit{
O{\doublepagesplitoverlap} % overlap
D||{0pt} % clip left
D||{#2} % clip right
D!!{0pt} % clip top
D!!{#4} % clip bottom
}{%
\cleardoubleevenpage\leavevmode\vfil
\flushright
\collectbox{%
\@doublepagesplit
{#2}{#4}%
{\dimexpr (\width - #1) / 2\relax}%
{#4}{#5}%
}%
}
\newcommand\@doublepagesplit[5]{%
\clipbox{{#1} {#2} {#3} {#5}}{\BOXCONTENT}%
\clearpage\leavevmode\vfil
\flushleft
\clipbox{{#3} {#2} {#4} {#5}}{\BOXCONTENT}%
\clearpage
}
\makeatother
\pgfdeclarelayer{blacknotes}
\pgfsetlayers{main,blacknotes}
\tikzset{tight fit/.style={inner sep=0pt, outer sep=0pt}}
\begin{document}
\doublepagesplit|-.5cm|{%
\begin{tikzpicture}
\def\lastnotenodename{clefs}
\node [text width=1cm, tight fit] (clefs) at (0,0) {
\begin{music}
\instrumentnumber{1}
\instrumentnumber{2}
\nostartrule
\setstaffs1{1}
\setstaffs2{1}
\setclef1{\bass}
\setclef2{\treble}
\startextract
\hskip2.0\elemskip
\zendextract
\end{music}
};
\foreach \note [
evaluate={
\n=int(mod(\note-1, 12));
\octave=int((\note+8)/12);
\t=int(floor((\note-1)/12)*7-7);
\notename={"A","","B","C","","D","","E","F","","G",""}[\n];
\tonicsolfa={"la","","si","so","","r\`e","","mi","fa","","sol",""}[\n];
\blacknote={0,1,0,0,1,0,1,0,0,1,0,1}[\n];
\frequency=(2^((\note-49)/12))*440;}
] in {1,...,88}{
\ifnum\octave>3
\tikzset{extract anchor/.style={anchor=south west, at=(\lastnotenodename.south east)}}
\else
\tikzset{extract anchor/.style={anchor=north west, at=(\lastnotenodename.north east)}}
\fi
\ifnum\blacknote=0
\edef\notenodename{\notename_\octave}
\node (\notenodename) [tight fit,text width=1cm, extract anchor/.try] {%
\begin{music}
\instrumentnumber{1}
\instrumentnumber{2}
\nostartrule
\setstaffs1{1}
\setstaffs2{1}
\setclefsymbol1{\empty}
\setclefsymbol2{\empty}
\setclef1{\bass}
\setclef2{\treble}
\startextract
\transpose\t
\hskip-1.5\elemskip
\ifnum\octave>3
\ifnum\octave>4
\Notes \nextinstrument \ql{\notename} \en
\else
\Notes \nextinstrument \qu{\notename} \en
\fi
\else
\ifnum\octave>2
\Notes \ql{\notename} \en
\else
\Notes \qu{\notename} \en
\fi
\fi
\zendextract
\end{music}
};
\xdef\lastnotenodename{\notenodename}
\node [anchor=base] (sol-fa) at (\notenodename |- 0,-3) {\tonicsolfa$_\octave$};
\draw (\notenodename.south west |- 0,-4) rectangle ++(1, -4);
\node [rotate=90, font=\footnotesize, anchor=east]
at (\notenodename.north |- 0,-4) {\threedp\frequency};
\node [font=\footnotesize, anchor=south]
at (\notenodename.south |- 0,-8) {\note};
\node [font=\footnotesize, anchor=south]
at (\notenodename.south |- 0,-8.5) {\notename$_\octave$};
\draw (\notenodename.south west |- sol-fa.south)
rectangle (\notenodename.south east |- 0,1.125); %0.125 by trial and error
\else
\begin{pgfonlayer}{blacknotes}
\fill ([xshift=-0.25cm]\lastnotenodename.north east |- 0,-4) rectangle ++(0.5, -2.5);
\node [rotate=90, text=white, font=\footnotesize, anchor=east]
at (\lastnotenodename.north east |- 0,-4) {\threedp\frequency};
\end{pgfonlayer}
\fi
}
\node [rotate=90] at (0,-6) {Fr\`equency (Hz)};
\end{tikzpicture}
}
\end{document}