如何给页面添加边框,实现类似如图效果?

发布于 2025-03-28 15:21:18

image.png

我用tblr实现的,不够优美

是否有更好的解决办法?

\documentclass[12pt]{ctexart}
\usepackage[left=1.5cm,right=1.5cm,top=1.5cm,bottom=2cm]{geometry}
\usepackage{graphicx}
\usepackage{setspace}
\usepackage{tabularray}
\usepackage{caption}
\usepackage{adjustbox}
\usepackage{mdframed}
\usepackage{tikz}
\captionsetup[table]{labelformat=empty}
\doublespacing
\begin{document}

\newpage

\begin{table}[!htbp]
    \centering
    \caption{\zihao{2}\heiti 项目一 “荧幕上的历史回响”主题实践活动}
    \begin{tblr}{
        width = \linewidth,
        colspec = {|Q[c,wd=0.7cm]X[c]Q[c,wd=0.5cm]|},
        hline{1,2},
        hline{4-27} = {2}{},
        cell{1}{1} = {c=3}{c},%顶部对齐t
        rows = {ht=.66cm},
        row{1} = {ht=1cm},
    }
    观看《十月围城》、\,《建党伟业》等影片(选一)\,,并与真实的历史事件相互印证,写出观后感。& & \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \hline
    \end{tblr}
\end{table}

\newpage
\begin{table}[!htbp]
    \centering
    \begin{tblr}{
        width = \linewidth,
        colspec = {|Q[c,wd=0.7cm]X[c]Q[c,wd=0.5cm]|},
        hline{2-29} = {2}{},
        rows = {ht=.66cm},
    }
    \hline
    & & \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \\
    \hline
    \end{tblr}
\end{table}

\end{document}

查看更多

关注者
0
被浏览
186
2 个回答
Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~

提问问题不够具体而且代码也太长(包含了一些敏感内容导致的)。要体现你的问题完全不需要这么长的代码,不要让潜在的回答者看你300多行的源代码,这不礼貌。你应该只提取出和你问题核心相关的某几行

Claim:我觉得应该有更好的实践实现在表格内填充水平横线,下面只是我非常native的尝试(从解决问题的角度来说,我觉得下面的答案在微调方面做的很烂):

\documentclass[12pt]{ctexart}
\usepackage[left=1.5cm,right=1.5cm,top=1.5cm,bottom=2cm]{geometry}
\usepackage{tikz}
\usepackage{setspace}
\usepackage{zhlipsum}
\NewDocumentCommand{\mytextbox}{ o m }{%
\noindent%
\begin{center}\vspace*{2ex}%
\begin{tabular}{|c|}%
    \IfNoValueF{#1}%
    {\hline{\zihao{3}#1}\\}
    \hline%
    \parbox{.95\linewidth}{%
        \vspace*{5ex}%
        \foreach \i in {1,...,{#2}}{%
            \vspace*{1ex}%
            \hrulefill \par
            \vspace*{1ex}%
        }
    }\\
    \hline%
\end{tabular}\vspace*{2ex}%
\end{center}
}

\doublespace
\begin{document}
\begin{center}
{\zihao{2}\bfseries 我是一个标题哈哈哈哈}
\end{center}

\mytextbox[请以如何提问为题目写一篇文章。]{15}

\zhlipsum[2]

\mytextbox{10}

\zhlipsum[2]

\mytextbox[我能吞下玻璃而不伤身体我能吞下玻璃而不伤身体]{17}

\end{document}

image.png

始终有一种感觉,TeX发展这么久了,类似作文纸的排版应该有相关的宏包...我自己造的轮子肯定相当粗糙...

Convat:如果你想要给每个页面添加类似于背景的“框”,可以使用tikz:

\documentclass{ctexart}
\usepackage[left=1.5cm,right=1.5cm,top=1.5cm,bottom=2cm]{geometry}
\usepackage{tikz}
\usepackage{zhlipsum}
\AddToHook{shipout/background}
{%
\begin{tikzpicture}[remember picture,overlay]
    \useasboundingbox[draw=black,thick] ([xshift=1.45cm,yshift=1.95cm]current page.south west) rectangle ([xshift=-1.45cm,yshift=-1.45cm]current page.north east);
\end{tikzpicture}%%
}
\begin{document}

\zhlipsum[1-9]

\end{document}
"如何添加页面边框,实现如图效果"

image.png

huzhen
huzhen biblatex 超级专家 21小时前
这家伙很懒,什么也没写!

给页面绘制框,基本思路就如 Sagittarius Rover 所示的方式,就是在页面叠一个背景(如tikz图)。

我猜你是要在不同的也设置不同的框,比如有的页有章节标题,要把章节名放在外面,那么可以根据章节的信息来判断绘制(大小和位置)不同的框。

比如我在nudtpaper中的NUDTproposal.cls利用了章节的计数器来做判断。
见:https://github.com/liubenyuan/nudtpaper/blob/master/proposal/NUDTproposal.cls?plain=1#L55-L70

具体为:

\RequirePackage{draftwatermark} %用其绘制框线
\numgdef\sectionpage{0}
\numgdef\pageafsecseven{10000}
\newcommand\FrameforSectionWM{%
\ifboolexpr{ test {\ifnumequal{\sectionpage}{0}}
or test {\ifnumequal{\value{section}}{5}}
or test {\ifnumequal{\value{section}}{6}}
or test {\ifnumgreater{\value{page}}{\pageafsecseven}}
}
{}{%
\ifnumequal{\value{page}}{\sectionpage}
{\tikz{\draw[line width=0.7pt] (0,0) rectangle (\textwidth+2mm,\textheight-0.6cm);}}
{\tikz{\draw[line width=0.7pt] (0,0) rectangle (\textwidth+2mm,\textheight+0.5mm);}}%
}%
}
\DraftwatermarkOptions{anchor=lb, pos={3cm,26.45cm},markcmd=\FrameforSectionWM}

其中,我使用了draftwatermark来输出背景而没有使用shipout钩子,但实际上draftwatermark可能也使用了类似钩子,具体是什么可以查一下其代码。

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览