嗨,我正在用 org-mode 编写电子书,其中包含一个单独的 .tex 文件用于样式。我想要做的是创建一个框,其中包含当前章节和部分名称,背景图像位于每页的左侧。此侧边栏应位于除标题页、目录页和新章节的第一页之外的每一页上。
目前我正在使用memoir
,我猜这可能与 makechapterstyle 有关。然而,上周是我第一次看到 LaTeX,所以我有点迷茫!我真的很想了解一下人们如何考虑用 LaTeX 解决这个问题,而不是采用现成的解决方案——尽管,显然我也会很感激 :-)
附注:搜索“乳胶墙纸”会得到一些有趣但不是特别相关的图像!
根据 Christian 的评论进行编辑
我正在写一本 pdf 电子书,并使用单面选项进行回忆。我想要的是一幅细长(1 厘米左右)的图像,沿着每个非标题页的左侧延伸,并将部分名称旋转 90˚ 叠加在上面。标题页将有一张稍宽的图像和一些简介。这是我灵感的截图:
答案1
这是一个开始(还有一些工作要做):
这使用包裹background
(内部使用tikz
)绘制所需的框架:
可以根据需要调整一些变量(所有距离均以厘米为单位):
\FrameXStart
是从页面边缘到框架外边缘的水平距离\FrameXEnd
是从页面边缘到框架内边缘的水平距离\FrameYClip
是从页面边缘到框架顶部/底部的垂直距离\FrameTextShift
是文本与页面上边缘的垂直距离\PageNumberLocation
是从页面底部到页码的垂直距离
笔记:
- 需要进行两次编译运行,第一次获取坐标,第二次进行实际绘图。
参考:
- 这是根据我之前的回答改编的:
- 在每一页上放置一张 TikZ 图片
- 如何使用 TikZ 和 graphicx 在左上角添加图像
- 我的回答指定页面顶部的图像包含选择性地将其放置在特定页面上的逻辑,因此也许可以用它来完成进一步增强部分。
进一步增强:
- 这将出现在每个页面上,因此需要检查检测:
- 封面,
- 目录页,以及
- 新篇章的第一页。
代码
\documentclass[12pt]{memoir}
\usepackage[all]{background}
\usepackage{lipsum}
\usepackage{showframe}
\usepackage{tikz}
\usetikzlibrary{calc}
%% Customization:
\newcommand*{\FrameXStart}{0.0}% in cm
\newcommand*{\FrameXEnd}{2.0}% in cm
\newcommand*{\FrameYClip}{0.0}% shift in cm of the frame, both from top and bottom
\newcommand*{\FrameTextShift}{-1.5}% shift in cm from the top
\newcommand*{\PageNumberLocation}{4.5}% in cm, from bottom
%-------------
% Need to store the name of the chapter and section. This might be able
% to be simplified but the simplification might be class dependent.
\newcommand*{\ChapterName}{}%
\newcommand*{\OldChapter}{}%
\let\OldChapter\chapter
\def\chapter#1{\def\ChapterName{#1}\OldChapter{#1}}%
\newcommand*{\SectionName}{}%
\newcommand*{\OldSection}{}%
\let\OldSection\section
\def\section#1{\def\SectionName{#1}\OldSection{#1}}%
\newcommand*{\FrameTitle}{\ChapterName: \SectionName}%
% Style for frame
\tikzset{Frame Style/.style={fill=blue, draw=none, fill opacity=0.5, shade, top color=blue, bottom color=green}}
\tikzset{Title Style/.style={scale=2.75, text=white, rotate=-90, anchor=west}}
\tikzset{Title Top Shift/.style={xshift=\Midpoint cm, yshift=\FrameTextShift cm}}
\tikzset{Title Bottom Shift/.style={xshift=-\Midpoint cm, yshift=\FrameTextShift cm}}
% Style for page numbers in frame
\tikzset{Page Number Style/.style={scale=2.0, text=white, draw=none}}
\tikzset{Page Number Odd Shift/.style={ xshift= \Midpoint cm, yshift=\PageNumberLocation cm}}
\tikzset{Page Number Even Shift/.style={xshift=-\Midpoint cm, yshift=\PageNumberLocation cm}}
\pgfmathsetmacro{\Midpoint}{0.5*(\FrameXStart+\FrameXEnd)}
\newcommand{\MyGraphicLogo}{% For imported graphic logo
\begin{tikzpicture}[remember picture,overlay]
\checkoddpage
\ifoddpage
\draw [Frame Style]
($(current page.north west)+(\FrameXStart cm,-\FrameYClip cm)$) rectangle
($(current page.south west)+(\FrameXEnd cm, \FrameYClip cm)$);
\node [Title Top Shift, Title Style] at (current page.north west) {\FrameTitle};
\node [Page Number Odd Shift, Page Number Style] at (current page.south west) {\thepage};
\else
\draw [Frame Style]
($(current page.north east)+(-\FrameXStart cm,-\FrameYClip cm)$) rectangle
($(current page.south east)+(-\FrameXEnd cm, \FrameYClip cm)$);
\node [Title Bottom Shift, Title Style] at (current page.north east) {\FrameTitle};
\node [Page Number Even Shift, Page Number Style] at (current page.south east) {\thepage};
\fi
\end{tikzpicture}
}
\SetBgContents{\MyGraphicLogo}% Select frame to be drawn
%\SetBgPosition{current page.north west}% Select location
\SetBgOpacity{1.0}% Select opacity
\SetBgAngle{0.0}% Select roation of logo
\SetBgScale{1.0}% Select scale factor of logo
\begin{document}
\chapter{Chapter Title}
\section{Section Title 1}
\lipsum[1-6]
\section{Section Title 2}
\lipsum[2-9]
\end{document}
答案2
我曾经尝试过做类似的事情。我不喜欢它,所以我没有完善代码,但也许这对你或其他人来说是一个很好的起点。既然你正在使用memoir
,你应该能够将其复制到你的序言中:
\makepagestyle{myVertical}
\makerunningwidth{myVertical}{1.08\textwidth}
\makeheadposition{myVertical}{flushright}{flushleft}{flushright}{flushleft}
\makeevenfoot{myVertical}{\thepage}{}{}
\makeoddfoot{myVertical}{}{}{\thepage}
\makeevenhead{myVertical}{\normalfont\vspace*{\headsep}\vspace*{\topskip}\par\rotatebox{90}{\scshape\MakeTextLowercase\leftmark}}{}{}
\makeoddhead{myVertical}{}{}{\normalfont\vspace*{\headsep}\vspace*{\topskip}\vspace*{-\baselineskip}\par\rotatebox{270}{\rightmark}}
\pagestyle{myVertical}
它在我的文档中是这样的(抱歉分辨率太差):
memoir
自动定义用于标题页等的其他几种页面样式,因此这些例外应该自动起作用。
我不太清楚您所说的“背景图像”和“框”是什么意思。您想要在文本后面添加某种装饰吗?也许这个问题会有所帮助:如何将 LaTeX 叠加到图片上?
编辑:如果您确实希望奇数页和偶数页的左边距中都有文本(我个人不推荐这样做;您可能需要阅读文档中的页面布局介绍memoir
),请将该\makeoddhead
行替换为如下内容:
\makeoddhead{myVertical}{\normalfont\vspace*{\headsep}\vspace*{\topskip}\par\hspace*{-2em}\rotatebox{90}{\rightmark}}}{}{}
-2em 完全是猜测的,您可能需要修改这个值,直到它对您的文档看起来不错为止。