【论文封面设计】如何实现在页面顶端添加文字和表格?

发布于 2022-01-22 13:12:54

论文word版本的封面顶端有文字和表格
微信截图_20220122130551.png
在我的latex排版中,如何实现在顶端插入文字和表格呢?
微信截图_20220122131120.png
解决问题,支付宝打30元

查看更多

关注者
0
被浏览
1.3k
如果您有什么不同意见,您是对的,我是错的。
这家伙很懒,什么也没写!

在导言区加上

\usepackage{multirow}
\makeatletter
\renewcommand{\maketitle}[1][15em]{
  \phantomsection
  \pdfbookmark[0]{封~面}{cover}
  \begin{titlepage}
    \begin{center}
      {编\hspace*{\ccwd}号:\hfill
      \begin{tabular}{|c|c|c|}
        \hline
        \multirow{2}*{类别} & 全日制教育硕士    & \\
        \cline{2-3}
                              & 非全日制教育硕士  & \\
        \hline
      \end{tabular}} \\
      \includegraphics[width=14cm]{\logopic}\\
      \vspace{1cm}
      \if@master
      {\fontsize{40}{40}\selectfont 硕~士~学~位~论~文}\\
      \else
      {\fontsize{40}{40}\selectfont 博~士~学~位~论~文}\\
      \fi
      \vspace{1.8cm}
      \begin{center}
      \parbox[t]{15cm}{\centering \zihao{1} \heiti \@title}
      \end{center}
      \vspace{1.2cm}
      {\zihao{3} \heiti
        \renewcommand\arraystretch{1.6}
        \begin{tabular}{lc}
          \makebox[7em][s]{专\hfill 业\hfill 教\hfill 学\hfill 部~:} & 
          \underline{\makebox[#1]{\defcollege}} \\
          \makebox[7em][s]{专\hfill 业\hfill 名\hfill 称~:} & 
          \underline{\makebox[#1]{\defmajor}} \\
          \makebox[7em][s]{指\hfill 导\hfill 教\hfill 师~:} & 
          \underline{\makebox[#1]{\definstructor}} \\
          \makebox[7em][s]{研\hfill 究\hfill 生~:} & 
          \underline{\makebox[#1]{\@author}} \\
          \makebox[7em][s]{提\hfill 交\hfill 时\hfill 间~:} & 
          \underline{\makebox[#1]{\@date}} \\
        \end{tabular}}\\
    \end{center}
  \end{titlepage}
  \cleardoublepage
}
\makeatother
4 个回答
芒果不盲
芒果不盲 2022-01-22
学好TiKZ和tcolorbox!

提供一种使用tikz pagenode的方法.绘制了一个封面

% 从fduthesis.dtx中抽取的
% 排版论文封面作者信息栏的代码
% (分散对齐代码)
\documentclass{ctexart}

% 导言区
\usepackage{expl3}
\usepackage{xparse}
\usepackage{tikz}

\ExplSyntaxOn
% 获取文本长度函数,#1用于保存长度,#2是被检测的文字
\cs_new:Npn \l_get_text_width:Nn #1#2
  {
    % 将文字内容存入变量
    \hbox_set:Nn \l_tmpa_box {#2}
    % 用\box_wd:N函数获取盒子宽度,并存入长度变量
    \dim_set:Nn #1 { \box_wd:N \l_tmpa_box }
  }
% 文本长度函数变体
\cs_generate_variant:Nn \l_get_text_width:Nn { NV }

% 获取clist中各个成员长度是大值,
% #1用于保存长度变量,#2是被检测clist变量
\cs_new:Npn \l_get_max_text_width:NN #1#2
  {
    \group_begin:
      % 将长度设置为小值
      \dim_set:Nn #1 {-999pt}
      \clist_set_eq:NN \l_tmpa_clist #2
      % 循环检测每个tl的长度,并更新是大值
      \bool_until_do:nn { \clist_if_empty_p:N \l_tmpa_clist }
        {
          \clist_pop:NN \l_tmpa_clist \l_tmpa_tl
          \l_get_text_width:NV \l_tmpa_dim \l_tmpa_tl
          \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_tmpa_dim } }
        }
    \group_end:
  }

% 分散对齐盒子,
% #1是盒子长度变量,#2是需要排版的文字
\cs_new_protected:Npn \l_spread_box:nn #1#2
  {
    \mode_leave_vertical:
    \hbox_to_wd:nn {#1}
      { \tl_map_inline:xn {#2} { ##1 \hfil } \unskip }
  }
% 分散对齐盒子函数变体
\cs_generate_variant:Nn \l_spread_box:nn  { Vn }
\cs_generate_variant:Nn \l_spread_box:nn  { nV }

% 居中对齐盒子,
% #1是盒子长度变量,#2是需要排版的文字
\cs_new_protected:Npn \l_center_box:nn #1#2
  {
    \mode_leave_vertical:
    \dim_set:Nn \l_tmpa_dim {#1}
    \dim_add:Nn \l_tmpa_dim {0.6em}
    \makebox[0cm][l]{\rule[-0.5ex]{\l_tmpa_dim}{0.4 pt}}
      {\hbox_to_wd:nn {\l_tmpa_dim} { \hfil #2 \hfil }}
  }
% 居中对齐盒子函数变体
\cs_generate_variant:Nn \l_center_box:nn { Vn }

% 为文字添加下划线
\cs_new:Npn \l_text_uline:n #1
  {
    \l_get_text_width:Nn \l_tmpa_dim {#1}
    \dim_add:Nn \l_tmpa_dim {0.6em}
    % 将标尺盒子放到宽度为0的左右盒子中实现下划线
    \makebox[0pc][l]{\rule[-0.5ex]{\l_tmpa_dim}{0.4 pt}}
      % 用高度为0的标尺盒子在文字两端添加空白
      \rule{.3em}{0cm}#1\rule{.3em}{0cm}
  }

% 定义需要的tl变量
\clist_map_inline:nn
  {
    major, researchfield, author, supervisor, date
  }
  { \tl_new:c { l_info_ #1 _tl } }

% 设置tl变量值的辅助函数
\cs_new_protected:Npn \__set_info_var:nn #1#2
  { \tl_set:cn { l_info_ #1 _tl } {#2} }
% 循环设置tl变量值
\clist_map_inline:nn
  {
    { major         } {         },
    { researchfield } { 教育学   },
    { author        } {         },
    { supervisor    } {         },
    { date          } {         },
  }
  { \__set_info_var:nn #1 }

% 定义tl常量的辅助函数
\cs_new_protected:Npn \__define_name:nn #1#2
  { \tl_const:cn { c_name_ #1 _tl } {#2} }

% 循环定义需要的tl常量
\clist_map_inline:nn
  {
    { major         } { 专业教学部  },
    { researchfield } { 专业名称    },
    { author        } { 指导教师    },
    { supervisor    } { 研究生      },
    { date          } { 提交时间    },
  }
  { \__define_name:nn #1 }

% 排版封面中的作者等信息
\cs_new_protected:Npn \l_cover_info:
{
  \begin{minipage} [ c ] { \textwidth }
    \centering
    % 构造各信息标识名称clist
    \clist_set:Nx \l_tmpa_clist
      {
        \c_name_major_tl,
        \c_name_researchfield_tl,
        \c_name_author_tl,
        \c_name_supervisor_tl,
        \c_name_date_tl,
      }
    % 构造各信息标识值clist
    \clist_set:Nx \l_tmpb_clist
      {
        { \l_info_major_tl         },
        { \l_info_researchfield_tl },
        { \l_info_author_tl        },
        { \l_info_supervisor_tl    },
        { \l_info_date_tl          }
      }
    % 计算最大长度
    \l_get_max_text_width:NN \l_tmpb_dim \l_tmpb_clist
    % 循环输出各字段
    \bool_until_do:nn { \clist_if_empty_p:N \l_tmpa_clist }
      {
        \clist_pop:NN \l_tmpa_clist \l_tmpa_tl
        \clist_pop:NN \l_tmpb_clist \l_tmpb_tl
        \heiti
        % 定宽分散对齐
        \l_spread_box:nn {7em} { \l_tmpa_tl }
        :
        \songti
        % 定宽居中对齐
        \l_center_box:Vn \l_tmpb_dim { \l_tmpb_tl }
        \par
      }
  \end{minipage}
}

% 定义用户接口
\NewDocumentCommand \txtuline { m }
  {
    \l_text_uline:n {#1}
  }
\NewDocumentCommand \makecover { }
  {
    \begin{titlepage}
        \begin{tikzpicture}[remember~picture,overlay]
        \node[scale=2,font=\Huge\bfseries] (title) at ([shift={(0,-0.3\paperheight)}]current~page.north){沈阳师范大学};
        \node[scale=2,font=\LARGE] (subtitle) at ([shift={(0,-0.1\paperheight)}]title){硕士学位论文};
        \node[align=center,scale=1.5] (info) at ([shift={(-0.08\paperwidth,-0.05\paperheight)}]current~page.center)
        {
          \l_cover_info:      
        };
        \node[scale=1.5,font=\bfseries]  at ([shift={(3,-3)}]current~page.north~west){编号:};
        \node[scale=1.5,font=\bfseries] at ([shift={(-5,-3)}]current~page.north~east)
        {
            \begin{tabular}{|c|c|c|}
              \hline  
              类 & 全日制教育硕士 & \\ \cline{2-3}
              别 & 非全日制教育硕士 & \\ \hline
            \end{tabular}
        };
        \end{tikzpicture}    
    \end{titlepage}
  }
\ExplSyntaxOff

% 正文区(有且只能有一个)
\begin{document}

  \makecover

\end{document}

效果如图:
QQ图片20220122143838.png

Chen Liou
Chen Liou 2022-01-22
这家伙很懒,什么也没写!

用tikz

雾月
雾月 2022-01-22
这家伙很懒,什么也没写!

解决办法有很多,如

  1. fancyhdr 宏包,设置页眉;
  2. 在旧的 LaTeX 版本中可以使用 everyshi 宏包,将其置于背景中;
  3. 在较新的 LaTeX 发行版中(Released 2020-10-01 及其后),可以使用 shipout 钩子;
  4. 使用 TikZ 的 current page node;
  5. 甚至可以直接放置,不需其它操作。

这里给出第3个办法的实现:

% !TEX program=xelatex
\documentclass{ctexart}
\usepackage[a4paper,hmargin=2.4cm,vmargin=2cm]{geometry}
\usepackage{array,multirow}

\begin{document}

\AddToHookNext{shipout/background}{\put(2.4cm,-3cm){%
  \makebox[\textwidth]{\heiti 编号:\hfill
    \begin{tabular}[c]{|c|c|c|}\hline
      \multirow{2}{1em}{类\\ 别} & 全日制教育硕士 & \hphantom{H} \\ \cline{2-3}
       & 非全日制教育硕士 & \\ \hline
    \end{tabular}}
}}

\thispagestyle{empty}

\leavevmode
\vfill

{\centering\zihao{2}\heiti 学位论文\par}

\vspace{1cm}

{\heiti 题目:}

\vspace{1cm}

\begin{center}
{\heiti
\renewcommand\arraystretch{1.5}%
\newcommand*\fixedbox[2][3cm]{%
  \begingroup
    \def\CJKglue{\hskip 0pt plus 2filll minus 1filll}%
    \makebox[#1][l]{#2}%
  \endgroup}
\newcommand*\infobox{\kern-5cm\makebox[5cm]}
\begin{tabular}{c@{:}>{\rule[-2pt]{5cm}{.4pt}}c}
\fixedbox{专业教学部} & \\
\fixedbox{专业名称}   & \infobox{教育学} \\
\fixedbox{指导教师}   & \\
\fixedbox{研究生}     & \\
\fixedbox{提交时间}   & \\
\end{tabular}}
\end{center}

\vspace{2cm}

{\centering\heiti 研究生院\quad 制\par}

\vspace{1cm}

\end{document}

image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览