在两张 A4 横向纸上分发大型 Tikz 图像

在两张 A4 横向纸上分发大型 Tikz 图像

我如何分发下面的图片,以便

  1. 它打印在两张 A4 横向纸上
  2. 中心 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

使用collectboxtrimclip我们可以以更通用的方式实现您想要的功能,即针对任何框。我添加了一些可选参数以进行额外的剪辑(例如,用于处理超出其边界框的内容)。

\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}

分离式钢琴键盘

相关内容