自动换行且带下划线的居中长标题的论文封面一种绘图实现

自动换行且带下划线的居中长标题的论文封面一种绘图实现

引言

在一些学位论文的封面上要求标题带有下划线,但长标题的情况下标题自动换行后下划线就会面临一些问题。
因此,往往需要一些特殊的处理。
在《如何制作自动换行且有定长下划线的论文封面模板?》,
《毕业论文封面上的标题下划线处理》
《不定长, 自动换行且有定长下划线的“论文标题”》
等文章中,
提供了一些很好的思路。主要有:利用表格内容下划线结合手动的画线;根据输入文本的长度直接对该文本分行并做下划线;利用两个同位置的adjustbox一个输出文本另一个根据行距指在定位置填充线作为下滑线。

然而,这个带下划线的长标题文本实际上只是封面等页面中的一个部分,在考虑实现时需要统筹页面中的其他要素。
考虑到在一个页面中过多的使用表、图等不同元素,实际上会导致精确定位等方面存在困难。
因为,为使下划线长文本能与其他要素更统一,也为了进一步简化代码,本文提供了一种新的实现,即直接利用绘图得到页面中的所有要素,从而避免使用表格来对齐,避免使用下滑线来处理复杂的换行,避免利用vspace等来定位,使得整个实现更易理解,更便于迁移和修改。
本文中对带下划线的多行长文本的处理类似于前述的第三种思路,但是利用tikz实现。首先利用tikz的node来输出自动换行的文本,然后从node中获得位置信息后直接根据行距绘制下划线。

值得注意的是,利用tikz绘制封面是一种比较常见的方法,所以本文只说是提供一种新的实现,相当于利用绘图这种方法来解决一些特殊的问题。

下面按从简到繁的顺序来介绍:自动换行且带下划线的长标题,长标题和其他元素构成的信息表,由信息表和其他要素构成的封面。

自动换行且带下划线的长标题

其思路如前所述,利用tikz的node输出文本,node中是parbox实现对文本的自动断行,然后根据node的信息和行距绘制下划线,同时利用node的位置对齐该标题所对应的标签。

比如:

\documentclass[twoside]{article}
\usepackage{ctex}
\usepackage{CJKfntef}
\usepackage{geometry}
\geometry{a4paper,top=27mm,bottom=25.4mm,left=30mm,right=30mm}
\geometry{headheight=7.7mm,headsep=4.3mm,footskip=7.9mm}\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{xcolor}\ExplSyntaxOn%获取node内部的文本行数存入counter:linesinnode中
\newdimen\mydimxs
\newdimen\mydimxe
\newdimen\myheight
\newcounter{linesinnode}
\NewDocumentCommand {\getnodedimen} {m} {\pgfextracty{\mydimxs}{\pgfpointanchor{#1}{south~west}}\pgfextracty{\mydimxe}{\pgfpointanchor{#1}{north~east}}\pgfmathsetlength{\myheight}{\mydimxe-\mydimxs+\baselineskip-0.9\ccwd}%\the\myheight\setcounter{linesinnode}{\numexpr\myheight/\baselineskip\relax}
}%记录表格标签的宽度、表格中node的基点位置
\newlength\rowlabelwidth
\setlength\rowlabelwidth{69pt} %指定宽度,宽度小一点可以压缩全角冒号标点所占的空间
\def\lastrowbasepoint{\pgfpointadd{\pgfpointanchor{current~page}
{north~west}}{\pgfpoint{6.55cm}{-14cm}}}%\pgfpointorigin\tikzstyle{multirow}=[inner~sep=0pt,minimum~width=295pt,
anchor=north~west,font=\fangsong]%draw=blue,
\tikzstyle{singlelabel}=[inner~sep=0pt,minimum~width=69pt,minimum~height=\baselineskip, text~height=\baselineskip-0.5mm,text~depth=0.1\baselineskip,anchor=north~east]
\tikzstyle{lineunderrow}=[black]%绘制带多行文本的行
\NewDocumentCommand \nodeonepairmultirow {m m} {\pgfcoordinate{BasePoint}{\lastrowbasepoint}\node [multirow] (noderightX) at (BasePoint) {\parbox{280pt}{\centering #2}};\getnodedimen{noderightX}\foreach \x in {1,...,\thelinesinnode} {\draw [lineunderrow]($(noderightX.south~east)+(0,\numexpr\x-1\relax\baselineskip-0.5mm)$) -- ($(noderightX.south~west)+(0,\numexpr\x-1\relax\baselineskip-0.5mm)$);}\node[inner~sep=0pt,anchor=north~east,minimum~width=69pt]  (nodeleft)  at (noderightX.north~west){\makebox[\rowlabelwidth][s]{#1}};\def\lastrowbasepoint{\pgfpointanchor{noderightX}{south~west}}
}
\ExplSyntaxOff\begin{document}\begin{tikzpicture}
\linespread{1.68}\zihao{3}\bfseries\heiti
\nodeonepairmultirow{论文题目:}{这是一个很长的很长的学位论文题目这是一个很长的学位论文XXX大学开题报告\LaTeX{} 模板}
\end{tikzpicture}\end{document} 

注意其中的关键是要利用\pgfextracty获取node的上下y坐标从而确定node 的高度,进而确定其内文本的行数,从而绘制对应数量的下划线。

其结果为:
在这里插入图片描述

长标题和其他元素构成的信息表

类似的,长标题可以绘制,短标题的信息也可以采用类似的方式绘制,而且利用node之间的相互位置关系,可以让这些信息之间具有更精确的定位。

比如:

\documentclass[twoside]{article}
\usepackage{ctex}
\usepackage{CJKfntef}
\usepackage{geometry}
\geometry{a4paper,top=27mm,bottom=25.4mm,left=30mm,right=30mm}
\geometry{headheight=7.7mm,headsep=4.3mm,footskip=7.9mm}\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{xcolor}\ExplSyntaxOn%获取node内部的文本行数存入counter:linesinnode中
\newdimen\mydimxs
\newdimen\mydimxe
\newdimen\myheight
\newcounter{linesinnode}
\NewDocumentCommand {\getnodedimen} {m} {\pgfextracty{\mydimxs}{\pgfpointanchor{#1}{south~west}}\pgfextracty{\mydimxe}{\pgfpointanchor{#1}{north~east}}\pgfmathsetlength{\myheight}{\mydimxe-\mydimxs+\baselineskip-0.9\ccwd}%\the\myheight\setcounter{linesinnode}{\numexpr\myheight/\baselineskip\relax}
}%记录表格标签的宽度、表格中node的基点位置
\newlength\rowlabelwidth
\setlength\rowlabelwidth{69pt} %指定宽度,宽度小一点可以压缩全角冒号标点所占的空间
\def\lastrowbasepoint{\pgfpointadd{\pgfpointanchor{current~page}
{north~west}}{\pgfpoint{6.55cm}{-14cm}}}%\pgfpointorigin\tikzstyle{multirow}=[inner~sep=0pt,minimum~width=295pt,
anchor=north~west,font=\fangsong]%draw=blue,
\tikzstyle{singlelabel}=[inner~sep=0pt,minimum~width=69pt,minimum~height=\baselineskip, text~height=\baselineskip-0.5mm,text~depth=0.1\baselineskip,anchor=north~east]
\tikzstyle{lineunderrow}=[red]
\tikzstyle{singlerow}=[inner~sep=0pt,minimum~width=295pt,minimum~height=\baselineskip, text~height=\baselineskip-0.5mm,text~depth=0.1\baselineskip,
font=\fangsong,anchor=north~west]
\tikzstyle{singleshortrow}=[inner~sep=0pt,minimum~width=112pt,
minimum~height=\baselineskip,text~height=\baselineskip-0.5mm,
text~depth=0.1\baselineskip,font=\fangsong,anchor=north~west]%绘制带多行文本的行
\NewDocumentCommand \nodeonepairmultirow {m m} {\pgfcoordinate{BasePoint}{\lastrowbasepoint}\node [multirow] (noderightX) at (BasePoint) {\parbox{280pt}{\centering #2}};\getnodedimen{noderightX}\foreach \x in {1,...,\thelinesinnode} {\draw [lineunderrow]($(noderightX.south~east)+(0,\numexpr\x-1\relax\baselineskip-0.5mm)$) -- ($(noderightX.south~west)+(0,\numexpr\x-1\relax\baselineskip-0.5mm)$);}\node[inner~sep=0pt,anchor=north~east,minimum~width=69pt]  (nodeleft)  at (noderightX.north~west){\makebox[\rowlabelwidth][s]{#1}};\def\lastrowbasepoint{\pgfpointanchor{noderightX}{south~west}}
}%绘制带单行文本的行
\NewDocumentCommand \nodeonepairsinglerow {m m} {\pgfcoordinate{BasePoint}{\lastrowbasepoint}\node[singlerow]  (noderight) at (BasePoint){\parbox{280pt}{\centering #2}};\draw [lineunderrow] ($(noderight.south~east)+(0,-0.5mm)$)-- ($(noderight.south~west)+(0,-0.5mm)$);\node[singlelabel]  (nodeleft)  at(noderight.north~west){\makebox[\rowlabelwidth][s]{#1}};\def\lastrowbasepoint{\pgfpointanchor{noderight}{south~west}}
}%绘制带单行文本的行,但有两列
\NewDocumentCommand \nodedblpairsinglerow {m m m m} {\pgfcoordinate{BasePoint}{\lastrowbasepoint}\node[singleshortrow]  (noderight) at (BasePoint){\parbox{105pt}{\centering #2}};\draw [lineunderrow] ($(noderight.south~east)+(0,-0.5mm)$) --($(noderight.south~west)+(0,-0.5mm)$);\node[singlelabel]  (nodeleft)  at(noderight.north~west){\makebox[\rowlabelwidth][s]{#1}};\node[singlelabel,anchor=north~west]  (noderighta)at (noderight.north~east){\makebox[\rowlabelwidth][s]{#3}};\node[singleshortrow]  (noderightb) at (noderighta.north~east){\parbox{105pt}{\centering #4}};\draw [lineunderrow] ($(noderightb.south~east)+(0,-0.5mm)$)-- ($(noderightb.south~west)+(0,-0.5mm)$);\def\lastrowbasepoint{\pgfpointanchor{noderight}{south~west}}
}
\ExplSyntaxOff\begin{document}\begin{tikzpicture}
\linespread{1.68}\zihao{3}\bfseries\heiti
\nodeonepairmultirow{论文题目:}{这是一个很长的很长的学位论文题目这是一个很长的学位论文XXX大学开题报告\LaTeX{} 模板}
\nodedblpairsinglerow{学\hspace{2em}号:}{160590XX}{姓\hspace{2em}名:}{谭同学}
\nodeonepairsinglerow{一级学科:}{控制科学与工程}
\nodeonepairsinglerow{研究方向:}{图像处理}
\nodedblpairsinglerow{指导教师:}{张老师}{职\hspace{2em}称:}{教~~授}
\nodeonepairsinglerow{学\hspace{2em}院:}{信息系统与管理学院}
\nodeonepairsinglerow{开题时间:}{2017 年 03 月 01 日}
\end{tikzpicture}\end{document} 

这里的关键则是,不同的行之间的相互定位关系。我们使用了pgfpoint和pgfcoordinate之间的转化。
在绘制前一行后,利用pgfpoint记录后一行的定位点\lastrowbasepoint。绘制后一行时,将pgfpoint转化为pgfcoordinate来定位本行的node位置。

注意:使用\pgfpointanchor命令从节点的各个位置上取出pgfpoint,利用\pgfcoordinate从pgfpoint中取出坐标点。

其结果为:
在这里插入图片描述

由信息表和其他要素构成的封面

封面除了论文相关的信息表外,还有与机构相关的其他信息,为便于定位,而避免利用vspace等来不断调试定位,直接利用绘图定位封面内的所有要素。
注意:tikz绘图时利用精确定位,需要带选项 remember~picture,overlay。

比如:

\documentclass[twoside]{article}
\usepackage{ctex}
\usepackage{CJKfntef}
\usepackage{geometry}
\geometry{a4paper,top=27mm,bottom=25.4mm,left=30mm,right=30mm}
\geometry{headheight=7.7mm,headsep=4.3mm,footskip=7.9mm}\renewcommand{\baselinestretch}{1.4} % line space setting
\usepackage{enumitem}
\AddEnumerateCounter{\chinese}{\chinese}{}\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{xcolor}
\usepackage{ctable}\ExplSyntaxOn%获取node内部的文本行数存入counter:linesinnode中
\newdimen\mydimxs
\newdimen\mydimxe
\newdimen\myheight
\newcounter{linesinnode}
\NewDocumentCommand {\getnodedimen} {m} {\pgfextracty{\mydimxs}{\pgfpointanchor{#1}{south~west}}\pgfextracty{\mydimxe}{\pgfpointanchor{#1}{north~east}}\pgfmathsetlength{\myheight}{\mydimxe-\mydimxs+\baselineskip-0.9\ccwd}%\the\myheight\setcounter{linesinnode}{\numexpr\myheight/\baselineskip\relax}
}%记录表格标签的宽度、表格中node的基点位置
\newlength\rowlabelwidth
\setlength\rowlabelwidth{69pt} %指定宽度,宽度小一点可以压缩全角冒号标点所占的空间
\def\lastrowbasepoint{\pgfpointadd{\pgfpointanchor{current~page}
{north~west}}{\pgfpoint{6.55cm}{-14cm}}}%\pgfpointorigin\tikzstyle{multirow}=[inner~sep=0pt,minimum~width=295pt,
anchor=north~west,font=\fangsong]%draw=blue,
\tikzstyle{singlerow}=[inner~sep=0pt,minimum~width=295pt,minimum~height=\baselineskip, text~height=\baselineskip-0.5mm,text~depth=0.1\baselineskip,
font=\fangsong,anchor=north~west]
\tikzstyle{singleshortrow}=[inner~sep=0pt,minimum~width=112pt,
minimum~height=\baselineskip,text~height=\baselineskip-0.5mm,
text~depth=0.1\baselineskip,font=\fangsong,anchor=north~west]
\tikzstyle{singlelabel}=[inner~sep=0pt,minimum~width=69pt,minimum~height=\baselineskip, text~height=\baselineskip-0.5mm,text~depth=0.1\baselineskip,anchor=north~east]
\tikzstyle{lineunderrow}=[black]%绘制带多行文本的行
\NewDocumentCommand \nodeonepairmultirow {m m} {\pgfcoordinate{BasePoint}{\lastrowbasepoint}\node [multirow] (noderightX) at (BasePoint) {\parbox{280pt}{\centering #2}};\getnodedimen{noderightX}\foreach \x in {1,...,\thelinesinnode} {\draw [lineunderrow]($(noderightX.south~east)+(0,\numexpr\x-1\relax\baselineskip-0.5mm)$) -- ($(noderightX.south~west)+(0,\numexpr\x-1\relax\baselineskip-0.5mm)$);}\node[inner~sep=0pt,anchor=north~east,minimum~width=69pt]  (nodeleft)  at (noderightX.north~west){\makebox[\rowlabelwidth][s]{#1}};\def\lastrowbasepoint{\pgfpointanchor{noderightX}{south~west}}
}%绘制带单行文本的行
\NewDocumentCommand \nodeonepairsinglerow {m m} {\pgfcoordinate{BasePoint}{\lastrowbasepoint}\node[singlerow]  (noderight) at (BasePoint){\parbox{280pt}{\centering #2}};\draw [lineunderrow] ($(noderight.south~east)+(0,-0.5mm)$)-- ($(noderight.south~west)+(0,-0.5mm)$);\node[singlelabel]  (nodeleft)  at(noderight.north~west){\makebox[\rowlabelwidth][s]{#1}};\def\lastrowbasepoint{\pgfpointanchor{noderight}{south~west}}
}%绘制带单行文本的行,但有两列
\NewDocumentCommand \nodedblpairsinglerow {m m m m} {\pgfcoordinate{BasePoint}{\lastrowbasepoint}\node[singleshortrow]  (noderight) at (BasePoint){\parbox{105pt}{\centering #2}};\draw [lineunderrow] ($(noderight.south~east)+(0,-0.5mm)$) --($(noderight.south~west)+(0,-0.5mm)$);\node[singlelabel]  (nodeleft)  at(noderight.north~west){\makebox[\rowlabelwidth][s]{#1}};\node[singlelabel,anchor=north~west]  (noderighta)at (noderight.north~east){\makebox[\rowlabelwidth][s]{#3}};\node[singleshortrow]  (noderightb) at (noderighta.north~east){\parbox{105pt}{\centering #4}};\draw [lineunderrow] ($(noderightb.south~east)+(0,-0.5mm)$)-- ($(noderightb.south~west)+(0,-0.5mm)$);\def\lastrowbasepoint{\pgfpointanchor{noderight}{south~west}}
}%定义两套Key-value设置,一套是NUDTlabelset,一套是NUDTvalueset
%前者用于在模板中定义,后者则作为用户接口
\NewDocumentCommand\definekey{mm}{\keys_define:nn { #1 }{#2 .tl_set:c = { l_#1_#2_tl }}}
\NewDocumentCommand\NUDTlabelset{m}{\keys_set:nn {NUDTlabel} { #1 }}
\NewDocumentCommand\NUDTvalueset{m}{\keys_set:nn {NUDTvalue} { #1 }}
\clist_const:Nn \l_NUDT_keys {author,title,author,title,schoollogo,schooltext,
proposaltype,classification,proposalnumber,authorid,major,field,advisor,
advisortitle,institute,date,formdate,mark}%在clist中定义key
\clist_map_inline:Nn \l_NUDT_keys{\definekey{NUDTlabel}{#1}}
\clist_map_inline:Nn \l_NUDT_keys{\definekey{NUDTvalue}{#1}}%设置标签信息
\NUDTlabelset
{   author={姓\hspace{2em}名:},title={论文题目:},schoollogo={},schooltext={},proposaltype={},classification={密级:},proposalnumber={编号:},authorid={学\hspace{2em}号:},major={一级学科:},field={研究方向:},advisor={指导教师:},advisortitle={职\hspace{2em}称:},institute={学\hspace{2em}院:},date={开题时间:},formdate={二〇一八年一月},% 制表月份mark={}, %XXX大学研究生院制
}%封面的命令
%注意:其中不同元素的定位根据模板的要求来设置
\NewDocumentCommand\makecover{}{
\newpage\thispagestyle{empty}\noindent
\begin{tikzpicture}[remember~picture,overlay]\begin{scope}\linespread{1.4}\node[anchor=center] at ($(current~page.north~west)+(5.45cm,-5.35cm)$){\l_NUDTvalue_schoollogo_tl};\node[font=\zihao{4}\mdseries\heiti] at($(current~page.north~east)+(-5.7cm,-5.5cm)$){\begin{tabular}{c c}\l_NUDTlabel_classification_tl &   {\fangsong\l_NUDTvalue_classification_tl} \\\l_NUDTlabel_proposalnumber_tl &   {\fangsong\l_NUDTvalue_proposalnumber_tl} \\\end{tabular}};\end{scope}\begin{scope}\node[] at ($(current~page.north~west)+(10.5cm,-8.3cm)$){\bfseries\l_NUDTvalue_schooltext_tl};\node[] at ($(current~page.north~west)+(10.5cm,-11.3cm)$){\mdseries\fontsize{28}{12}\selectfont\begin{tabular}{c}\l_NUDTvalue_proposaltype_tl \\开题报告\\\end{tabular}};\linespread{1.68}\zihao{3}\bfseries\heiti\nodeonepairmultirow{\l_NUDTlabel_title_tl}{\l_NUDTvalue_title_tl}\nodedblpairsinglerow{\l_NUDTlabel_authorid_tl}{\l_NUDTvalue_authorid_tl}{\l_NUDTlabel_author_tl}{\l_NUDTvalue_author_tl}\nodeonepairsinglerow{\l_NUDTlabel_major_tl}{\l_NUDTvalue_major_tl}\nodeonepairsinglerow{\l_NUDTlabel_field_tl}{\l_NUDTvalue_field_tl}\nodedblpairsinglerow{\l_NUDTlabel_advisor_tl}{\l_NUDTvalue_advisor_tl}{\l_NUDTlabel_advisortitle_tl}{\l_NUDTvalue_advisortitle_tl}\nodeonepairsinglerow{\l_NUDTlabel_institute_tl}{\l_NUDTvalue_institute_tl}\nodeonepairsinglerow{\l_NUDTlabel_date_tl}{\l_NUDTvalue_date_tl}\node[] at ($(current~page.north~west)+(10.5cm,-25.5cm)$){\begin{tabular}{p{400pt}<{\centering}}{\mdseries\l_NUDTvalue_mark_tl}  \\{\mdseries\l_NUDTlabel_formdate_tl}\end{tabular}};\end{scope}
\end{tikzpicture}\clearpage%%%% 说明页\thispagestyle{empty}\begin{center}{\heiti \zihao{2} 说 \qquad 明}\end{center}
{\songti\zihao{-4}\SetEnumitemKey{noenumsep}{labelsep=0pt,topsep=0pt,partopsep=0pt,itemsep=0pt,parsep=0pt}
\begin{enumerate}[label={\chinese*、},noenumsep]\item 开题报告应按下述要求打印后装订成册:
\begin{enumerate}[label={\arabic*.},noenumsep]\item 	使用A4白纸,双面打印;\item 	封面中填写内容使用小3号仿宋字体;\item 	表中填写内容使用5号楷体字体。\end{enumerate}\item 封面中的编号由学院填写,采用八位数编码,前四位为审批日期,精确到年月即可,第五位为院别,后三位为审批流水号(按年)。如15016100,为6院15年审批的第100位开题申请者,审批时间为15年1月份。院别代码与编制序列一致,海洋科学与工程研究院代码为0。\item 开题报告表中学员填写的内容包括学位论文选题的立论依据、文献综述、研究内容、研究条件、学位论文工作计划、主要参考文献等,指导教师认可学员开题报告内容后,对学员学位论文选题价值、对国内/外研究现状的了解情况、研究内容、研究方案等方面予以评价。\item 开题报告评议小组一般由3-5名具有正高级专业技术职务的专家(包括导师)组成,其中一名为跨一级学科的专家。\item 若开题报告获得通过,应根据评议小组意见对开题报告进行修改,并在开题报告会后两周内,将评议表和修订后开题报告纸质版原件交学院备案;若开题报告未获得通过,则填报延期开题申请,由原开题报告评议小组重新组织开题报告会。\end{enumerate}}
}
\ExplSyntaxOff\begin{document}%设置论文信息
\NUDTvalueset
{author={谭同学},                % 作者title={这是一个很长的很长的学位论文题目这是一个很长的学位论文XXX大学开题报告\LaTeX{} 模板},                          % 论文标题schoollogo={\fbox{\parbox[c][2.7cm][c]{2.8cm}{\centering 某某大学logo}}},%大学logoschooltext={\zihao{-1}\heiti\makebox[5cm][s]{某科技大学}},%大学名proposaltype={\CJKunderline{博士}研究生学位论文}, % 研究生类别:硕士,博士需下划线classification={公开},          % 密级:公开,秘密,机密或者绝密proposalnumber={\underline{\makebox[1cm][c]{XXX}}},  % 编号:默认是下划线authorid={160590xx},            % 学号major={控制科学与工程},         % 一级学科field={图像处理},               % 研究方向advisor={张老师},               % 导师advisortitle={教~~~~授},        % 职称institute={信息系统与管理学院}, % 学院date={2017~年~03~月~01日},      % 开题日期mark={某科技大学研究生院制},    % 制表单位信息
}%绘制封面
\makecover\end{document} 

注意:其中为了方便输入信息同时减少代码,我们利用了key-value的方式来实现。

其结果为:
在这里插入图片描述在这里插入图片描述

小结

本文为一些学位论文封面设置提供了一种完全基于绘图的实现,其中实现了自动换行的带下滑线的长文本,并利用tikz的坐标定位得到精确的封面元素布局。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543808.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

第九节 Opencv自带颜色表操作

知识点&#xff1a;Look Up lTable&#xff08;LUT&#xff09;查找表 了解LUT查找表的作用与用法&#xff0c;代码实现与API介绍 -applyColorMap&#xff08;src,dst,COLORMAP&#xff09; -src表示输入图像 -dst表示输出图像 匹配到的颜色LUT&#xff0c;Opencv支持13种…

17.2 ksm源码讲解

本节重点介绍 : k8s资源对象的 buildStores构造函数注入MetricFamiliesk8s client-go 之 Reflector listAndWatch 方法watchHandler 监听更新&#xff0c;调用add等action 架构图总结 项目地址 地址 go get go get -v -d k8s.io/kube-state-metrics/v2v2.1.1源码分析 m…

【Godot4.3】自定义数列类NumList

概述 数列是一种特殊数组。之前写过等比、等差数列、斐波那契等数列的求取函数。今天就汇总到一起&#xff0c;并添加其他的一些数列&#xff0c;比如平方数、立方数、三角形数等。 这里我首先采用以前比较喜欢的静态函数库的写法&#xff0c;然后在其基础上改进为基于类继承…

大数据毕业设计选题推荐-国潮男装微博评论数据分析系统-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

[vulnhub] Jarbas-Jenkins

靶机链接 https://www.vulnhub.com/entry/jarbas-1,232/ 主机发现端口扫描 扫描网段存活主机&#xff0c;因为主机是我最后添加的&#xff0c;所以靶机地址是135的 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-21 14:03 CST Nmap scan…

Android中高级面试题笔记题理论知识大全(PDF免费下载)

Android中高级面试题笔记题理论知识大全(PDF免费下载) 基本上全覆盖了市面上中大厂的面试题&#xff0c;笔试题。而且持续更新。 而且现在市场行情非常不好&#xff0c;所以多学点&#xff0c;背点面试题&#xff0c;笔记题目总没有坏处&#xff0c;只有好处。想获取更多资料: …

手机上轻松解压并处理 JSON 文件

JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;在手机上有着广泛的应用场景。 首先&#xff0c;在数据传输方面&#xff0c;许多移动应用程序通过网络请求与后端服务器进行交互&#xff0c;而服务器端的 API 接口通常使用 JS…

[Redis][持久化][上][RDB]详细讲解

目录 0.前言1.RDB0.是什么&#xff1f;1.触发机制2.流程说明3.RDB文件的处理4.RDB的优缺点 0.前言 Redis ⽀持 RDB 和 AOF 两种持久化机制&#xff0c;持久化功能有效地避免因进程退出造成数据丢失问题&#xff0c;当下次重启时利⽤之前持久化的⽂件即可实现数据恢复 RDB ->…

Qt/C++ 了解NTFS文件系统,解析MFT主文件表中的常驻属性与非常驻属性

系列文章目录 整个专栏系列是根据GitHub开源项目NTFS-File-Search获取分区所有文件/目录列表的思路。 具体的如下: Qt/C 了解NTFS文件系统&#xff0c;了解MFT(Master File Table)主文件表&#xff08;一&#xff09; 介绍NTFS文件系统&#xff0c;对比通过MFT(Master File Tab…

16、斑马设备的ppocer-4进行文字识别,和opencv-mobile中文显示

基本思想:手上有个斑马设备,是客户的,简单记录一下开发过程和工程项目,同时记录跟着android小哥学习了很多anroid的知识,转ppocr-4参考之前的ppocr-3转换即可,整个框架仍然使用c++ ncnn jni框架推理和现实,图像库使用opencv-mobile 一、首先转paddle-cor-4 到ncnn的框架…

Pointnet++改进59:全网首发MogaBlock(2024最新模块)|用于在纯基于卷积神经网络的模型中进行判别视觉表示学习,具有良好的复杂性和性能权衡

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入MogaBlock,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三 1.…

pdf怎么删除空白页?分享5个删除pdf页面的方法(批量删除法)

pdf文件因其跨平台、格式稳定的特性&#xff0c;已成为我们工作、学习中不可或缺的一部分。那么在编辑pdf格式文档中&#xff0c;总会遇到一些难题&#xff0c;比如说pdf怎么删除空白页 pdf与word一样&#xff0c;具备了多种编辑功能&#xff0c;只不过是word倾向于编辑&#x…

gitlab集成CI/CD,shell方式部署

目录 1.首先安装好gitlab和gitlab-runner&#xff0c;这两个&#xff0c;看我以往的教程 2.注册新的 Runner 3. 步骤 3.1 Enter the GitLab instance URL (for example, https://gitlab.com/): 3.2 Enter the registration token: 3.3 Enter a description for the runner: 3…

Python模块和包:自定义模块和包③

文章目录 一、模块1.1 什么是模块1.2 创建模块1.3 导入模块1.4 模块的命名空间 二、包2.1 什么是包2.2 创建包2.3 导入包2.4 包的命名空间 三、综合详细例子3.1 项目结构3.2 模块代码student.pycourse.pymanager.py 3.3 主程序代码main.py 3.4 运行结果 四、总结 Python模块和包…

Java 中的运算符重载

在这篇文章中&#xff0c;我们将深入探讨 Java 中 Operator 重载的迷人世界。尽管 Java 本身不支持运算符重载&#xff0c;但我们将发现 Manifold 如何使用该功能扩展 Java。我们将探讨它的好处、局限性和用例&#xff0c;尤其是在科学和数学代码方面。 我们还将探索 Manifold …

高清8k电脑壁纸分享

Hello&#xff01;欢迎各位新老朋友来看小弟博客&#xff0c;祝大家事业顺利&#xff0c;财源广进&#xff01;&#xff01; 主题&#xff1a;高清壁纸分享 文件太大上传不上去&#x1f605;&#x1f605;&#x1f605;&#x1f605;&#x1f605;&#xff0c;需要的朋友自取&…

国货美妆品牌整合营销多少钱?

合作咨询联系竑图 hongtu201988 化妆品品牌线上推广费用到底高不高&#xff0c;需要多少钱&#xff0c;是每个经营者最为关注的问题。结合中小美妆品牌在网络上的费用投入&#xff0c;有一个大致的范围&#xff1a;几千元到几十万不等/年&#xff01;品牌越大&#xff0c;投入越…

什么鬼?主备同步正常,备库查询表空间使用结果却是空的?

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG、Mongodb数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享…

Centos Stream 9根目录扩容

要将 sda 的剩余空间扩展给 cs-root&#xff0c;可以按照以下步骤进行操作。假设你已经有剩余的未分配空间在 sda 上。 步骤 1&#xff1a;查看当前磁盘分区情况 首先&#xff0c;确保你有未分配的空间在 sda 上。 lsblk步骤 2&#xff1a;创建新的分区 使用 fdisk 或 par…

C++vector类的模拟实现

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 模拟实现vector类 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 前置说明 1. vecto…