参考:

参考:

嗨,我正在用 org-mode 编写电子书,其中包含一个单独的 .tex 文件用于样式。我想要做的是创建一个框,其中包含当前章节和部分名称,背景图像位于每页的左侧。此侧边栏应位于除标题页、目录页和新章节的第一页之外的每一页上。

目前我正在使用memoir,我猜这可能与 makechapterstyle 有关。然而,上周是我第一次看到 LaTeX,所以我有点迷茫!我真的很想了解一下人们如何考虑用 LaTeX 解决这个问题,而不是采用现成的解决方案——尽管,显然我也会很感激 :-)

附注:搜索“乳胶墙纸”会得到一些有趣但不是特别相关的图像!

根据 Christian 的评论进行编辑

我正在写一本 pdf 电子书,并使用单面选项进行回忆。我想要的是一幅细长(1 厘米左右)的图像,沿着每个非标题页的左侧延伸,并将部分名称旋转 90˚ 叠加在上面。标题页将有一张稍宽的图像和一些简介。这是我灵感的截图:

副业项目书

答案1

这是一个开始(还有一些工作要做):

这使用包裹background(内部使用tikz)绘制所需的框架:

在此处输入图片描述

可以根据需要调整一些变量(所有距离均以厘米为单位):

  • \FrameXStart是从页面边缘到框架外边缘的水平距离
  • \FrameXEnd是从页面边缘到框架内边缘的水平距离
  • \FrameYClip是从页面边缘到框架顶部/底部的垂直距离
  • \FrameTextShift是文本与页面上边缘的垂直距离
  • \PageNumberLocation是从页面底部到页码的垂直距离

笔记:

  • 需要进行两次编译运行,第一次获取坐标,第二次进行实际绘图。

参考:

进一步增强:

  • 这将出现在每个页面上,因此需要检查检测:
    1. 封面,
    2. 目录页,以及
    3. 新篇章的第一页。

代码

\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 完全是猜测的,您可能需要修改这个值,直到它对您的文档看起来不错为止。

相关内容