我正在创建一个两页的课程大纲,其中左侧列有一个 tikz 日历,所有内容都在页面右侧。目前,右侧内容就像一个普通的文章类文档,左边距由几何包调整,以避免与绝对定位的 tikz 日历重叠。
问题:在 (Xe)Latex 中,是否有任何方法可以将两列放入环境中,这样我在左列中输入的任何内容都完全独立于右列,反之亦然,这样可以有效地将 tikz 图片锁定到页面上,而忽略右侧内容。
我的目标:我的所有教学大纲的主文档,右侧内容只是一个 \input{thecontent}。左侧将是一个 tikz 日历(一个在第一页,一个在第二页)
问题:我有一个主文档,但如果右栏内容(这\输入{内容}) 是一份较短的文档,或者更可能是一份较长的文档,我必须不断移动 tikzpicture 环境才能将日历放在页面左侧。文本似乎将它们推到下一页。
注意:目前,tikzpicture 环境绝对定位在页面上。
--------------->
\documentclass[10pt]{article}
\usepackage{fontspec}
%CUSTOM VARIABLES
\newcommand{\content}{./"Winter2012/Listening and Speaking 1/Listening_and_Speaking_1_Syllabus"}
%UNUSED COMMANDS, BUT PERHAPS USEFUL LATER
\newcommand{\institution}{Universität Innsbruck}
\newcommand{\department}{Institut der Anglistik}
\newcommand{\class}{Listening \& Speaking I}
\newcommand{\designation}{SL/2}
\newcommand{\ECTS}{ECTS: 2.5}
\newcommand{\hours}{[W 10.00-12.00]}
\newcommand{\office}{}
%SET MARGINS (AND PAGE DIMENSIONS)
\usepackage[top=2.8cm,bottom=2cm,left=7cm,right=2cm,head=30pt]{geometry}
\usepackage{wrapfig}
%USE THISPAGESTYLE{EMPTY} BELOW MAKETITLE OR {FANCY}
\usepackage{tikz}
\usetikzlibrary{shapes,calendar,mindmap,patterns}
\usepackage{everypage} % put something on every page
%HEADER FOOTER
\usepackage{fancyhdr}
\lhead{} \chead{\textsc{}} \rhead{\textsc{{\Huge\class}\\\institution} }
\lfoot{\textsc{J. Komar}} \cfoot{\textsc{}} \rfoot{\textsc{\today}}
\renewcommand{\headrulewidth}{0.0pt}
\renewcommand{\footrulewidth}{0.0pt}
%\renewcommand{\headersep}{5cm}
\pagestyle{fancy}%ADD HEADER FOOTER TO PAGE EXCEPT TITLE PAGE
%USE THISPAGESTYLE{EMPTY} BELOW MAKETITLE OR {FANCY}
\usepackage{lipsum}%To generate test text, use \lipsum[#NUMOFLINES#] in body
%\newcommand\event[2]{\ifdate{equals=#1} {\node [anchor=north west, text width=3.5cm,event]{#2};
\newcommand\event[2]{
\ifdate{equals=#1} {
% In the following, the event nodes are defined
% The \rule in the node text is necessary to match the "text depth=0.5ex" of the date nodes
\node [yshift=6pt,xshift=5pt,anchor=west,text height=1.5ex, text width=3.5cm,event]{#2};
}{}
}
\newcommand\redevents{
\tikzstyle{event}=[black,fill=red!10]
%\event{2012-10-31}{This is a very long event text running over three lines.}
%\event{2012-11-07}{Short event!}
%\event{2012-11-14}{Third of the longish events\ldots}
}
\usepackage{enumitem}
\setlist{nolistsep}
\begin{document}%BEGIN DOCUMENT
%BACKGROUNDS
\AddEverypageHook{ % on every page...ensure \usepackage{everypage} in header
\begin{tikzpicture}[remember picture, overlay]
\node[xshift=1.8cm] at (current page.north west) {\begin{tikzpicture}[remember picture,overlay,fill opacity=0.5]\path[fill=yellow!15] (0,0) rectangle (4.5cm,-\paperheight);\end{tikzpicture}};
\node[yshift=-.5cm,xshift=0cm] at (current page.north west) {\begin{tikzpicture}[remember picture, overlay]\path[fill=blue!15] (0,0) rectangle (\paperwidth,-2cm);
\end{tikzpicture}};
\end{tikzpicture}
}
\begin{wrapfigure}{l}{0.5cm}
\tiny
\begin{tikzpicture}[remember picture]
\path[use as bounding box] (0,0) rectangle (1,1); % adjust to fit
\node[xshift=2.2cm,yshift=-3.5cm](NW) at (current page.north west) {};
\calendar [day list downward,
month text=\%mt\ \%y0,
month yshift=5em,
name=cal,
dates=2012-10-01 to 2012-12-last,
at={(NW)},
every day/.style={
anchor=mid,
text depth=0.5ex,
text height=1.5ex,
text width=.3cm,
align=center},
execute after day scope={
\redevents
}
]
if (Wednesday) {\draw[black] (0,0) circle (4pt);}
if (weekend) [transparent!0]
if (day of month=1) {
\node at (0pt,2em) [anchor=base west,color=black] {\small\tikzmonthtext};
\draw[anchor=north,yshift=8pt] (0,0)--(4,0);
};
\end{tikzpicture}
\end{wrapfigure}
\input{\content}%inputted right column
%%%%%%%%%%%%%%%%END OF CONTENT
\begin{wrapfigure}{r}{0.5cm}
\tiny
\begin{tikzpicture}[remember picture]
\path[use as bounding box] (0,0) rectangle (1,1); % adjust to fit
\node[xshift=2.2cm,yshift=-3.5cm](NW) at (current page.north west) {};
\calendar [day list downward,
month text=\%mt\ \%y0,
month yshift=5em,
name=cal,
dates=2013-01-01 to 2013-02-last,
at={(NW)},
every day/.style={
anchor=mid,
text depth=0.5ex,
text height=1.5ex,
text width=.3cm,
align=center},
execute after day scope={
\redevents
}
]
if (Wednesday) {\draw[black] (0,0) circle (4pt);}
if (weekend) [transparent!0]
if (day of month=1) {
\node at (0pt,2em) [anchor=base west,color=black] {\small\tikzmonthtext};
\draw[anchor=north,yshift=8pt] (0,0)--(4,0);
};
\end{tikzpicture}
\end{wrapfigure}
\end{document}
答案1
不确定parcolums
在这种情况下包是否合适,因为您必须定义列之间的某种同步(因为包的目的是让两列的内容并行运行,就像双语文本一样)。
如果您想要的是两个完全独立的列,每个列都有自己的文本“流”,我能想到的最简单的解决方案就是将每个列排版在单独的文档中(每个列的尺寸为paperwidth
和paperheight
相等),然后通过将两个文档合并为一个文档\includegraphics
,取出每个文档的一页并将它们并排放置。
以下 MWE 实现了这个想法。这不是一个完整的解决方案,因为它假设两个文档的长度相同(以页为单位),但它可以说明这个想法。
首先,将以下内容保存在名为的文件中column1.tex
,并编译它以获得column1.pdf
:
\documentclass{article}
\usepackage[paperwidth=6cm, paperheight=23cm, margin=0cm]{geometry}
\usepackage{lipsum}
\begin{document}\sloppy\small
\lipsum[1-15]
\end{document}
本文档的第一页如下所示:
然后,在名为的文件中排版第二列column2.tex
,并进行编译得到column2.pdf
:
\documentclass{article}
\usepackage[paperwidth=10cm, paperheight=23cm, margin=0cm]{geometry}
\usepackage{lipsum}
\begin{document}
\lipsum[1-20]
\end{document}
其第一页如下所示:
最后,以下文档结合了前两个文档:
\documentclass{article}
\usepackage[margin=2cm]{geometry}
\usepackage{graphicx}
\input{repeat}
\begin{document}
\repeat\for{pag}\by{1}\from{1}\to{4}
\do{
\noindent\includegraphics[page=\the\pag]{column1}%
\hfill\includegraphics[page=\the\pag]{column2}%
\clearpage
}
\end{document}
本文件的第一页和最后一页如下所示:
更新:以下版本的代码现在“合并”了两个列,它更加通用,可以自动适应每列的页数,停止最先结束的列的输出,只继续输出另一列:
\documentclass{article}
\usepackage[margin=2cm]{geometry}
\usepackage{graphicx}
\usepackage{pdfpages}
\input{repeat}
\begin{document}
\pdfximage{column1.pdf}
\edef\pagfirst{\the\pdflastximagepages}
\pdfximage{column2.pdf}
\edef\pagsecond{\the\pdflastximagepages}
\ifnum\pagfirst>\pagsecond
\edef\maxpag{\pagfirst}
\else
\edef\maxpag{\pagsecond}
\fi
\repeat\for{pag}\by{1}\from{1}\to{\maxpag}
\do{
\ifnum\the\pag>\pagfirst\relax\else%
\noindent\includegraphics[page=\the\pag]{column1}%
\fi%
\ifnum\the\pag>\pagsecond\relax\else%
\hfill\includegraphics[page=\the\pag]{column2}%
\fi
\clearpage
}
\end{document}