diff --git a/20191212/hp-2019ws-p3.pdf b/20191212/hp-2019ws-p3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4384f28b23ec8242c96c7c482c1b3f3c2045065a Binary files /dev/null and b/20191212/hp-2019ws-p3.pdf differ diff --git a/20191212/hp-2019ws-p3.tex b/20191212/hp-2019ws-p3.tex new file mode 100644 index 0000000000000000000000000000000000000000..28a0031067da8b8a2f4bfee386013a52ae7091f3 --- /dev/null +++ b/20191212/hp-2019ws-p3.tex @@ -0,0 +1,175 @@ +% hp-2019ws-p1.pdf - Labor Notes on Low-Level Programming +% Copyright (C) 2014, 2015, 2018, 2019 Peter Gerwinski +% +% This document is free software: you can redistribute it and/or +% modify it either under the terms of the Creative Commons +% Attribution-ShareAlike 3.0 License, or under the terms of the +% GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) +% any later version. +% +% This document is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this document. If not, see <http://www.gnu.org/licenses/>. +% +% You should have received a copy of the Creative Commons +% Attribution-ShareAlike 3.0 Unported License along with this +% document. If not, see <http://creativecommons.org/licenses/>. + +% README: Versuch 3, 12. und 19.12.2019: Weltraum-Simulation + +\documentclass[a4paper]{article} + +\usepackage{pgscript} +\usepackage{multicol} +%\usepackage{sfmath} + +\sloppy +\raggedcolumns +\pagestyle{empty} +\addtolength{\textheight}{1cm} +\newcommand{\sep}{~$\cdot$~} +\newcommand{\mylicense}{CC-by-sa (Version 3.0) oder GNU GPL (Version 3 oder höher)} + +\begin{document} + + \makebox(0,0.005)[tl]{\includegraphics[scale=0.72]{logo-hochschule-bochum-cvh-text-v2.pdf}}\hfill + \makebox(0,0)[tr]{\includegraphics[scale=0.5]{logo-hochschule-bochum.pdf}} + \par\bigskip\bigskip + \begin{center} + \Large\textbf{Praktikumsversuch 3: Weltraum-Simulation} + \par\medskip + \normalsize Hardwarenahe Programmierung\sep + Wintersemester 2019/20\sep + Prof.~Dr.~Peter Gerwinski + \end{center} + + Aufgabe: Schreiben Sie ein C-Programm, + das die Bahnen von mindestens 3 Massenpunkten unter Einfluß der Gravitation + simuliert und in bewegter Grafik darstellt. + + \begin{multicols}{2} + + \begin{itemize} + \item + Zwei Massenpunkte ("`Himmelskörper"') mit den Massen $m_i$ und $m_j$ + an den Orten $\vec{r}_i$ und $\vec{r}_j$ ziehen einander an. + Diese Kraft heißt Gravitation. Sie hat den Betrag: + \begin{equation} + |\vec{F}_{ij}| = \frac{m_j\cdot m_i\cdot G}{|\vec{r}_j - \vec{r}_i|^2} + \end{equation} + Hierbei ist $G$ eine Konstante (Gravitationskonstante). + \item + Die auf einen Himmelskörper wirkende Gesamtkraft $\vec{F}_i$ + ergibt sich als Summe der von allen anderen Himmelskörpern herrührenden + Gravitationskräfte: + \begin{equation} + \vec{F}_i = \sum_{j=0,\,j\ne i}^{N - 1} \vec{F}_{ij} + \end{equation} + \item + Die Gravitationskraft beschleunigt jeden Himmelskörper gemäß: + \begin{equation} + \vec{F_i} = m_i\cdot \vec{a_i} + \end{equation} + \item + Beispiel: Wir betrachten zwei Himmelskörper. Einer davon ("`Zentralgestirn"') + ruht im Zentrum ($\vec{r}_0 = 0$, $\vec{v}_0 = 0$) + und hat eine wesentlich größere Masse als der andere + ("`Satellit"', $m_1 \ll m_0$). Mit geeignetem Anfangsort $\vec{r}_1$ + und geeigneter Anfangsgeschwindigkeit $\vec{v}_1$ beschreibt dann + der Satellit eine elliptische Umlaufbahn um das Zentralgestirn. + \item + Wir rechnen in zwei Dimensionen $x$ und $y$. + \item + Für die Zerlegung einer Kraft $\vec{F}_{ij}$ in $x$- und $y$-Komponenten + benötigen Sie nur die Grundrechenarten und die Wurzelfunktion, + jedoch insbesondere \emph{keine} trigonometrischen Funktionen: + \begin{equation} + \vec{F}_{ij} = |\vec{F}_{ij}| \cdot \frac{\vec{r}_j - \vec{r}_i}{|\vec{r}_j - \vec{r}_i|} + \end{equation} + \columnbreak + \item + Die Wurzelfunktion \lstinline{sqrt()} finden Sie + in der Mathematik-Bibliothek. + Um diese zu nutzen, verwenden Sie \lstinline{#include <math.h>} im Quelltext, + und geben Sie beim \lstinline[style=cmd]{gcc}-Aufruf + \lstinline[style=cmd]{-lm} mit an. + \item + Für die Simulation betrachten wir das System in kurzen Zeitintervallen $dt$ + und berechnen die Änderungen des Ortes $\vec{r}_i = (x_i,y_i)$ + und der Geschwindigkeit $\vec{v}_i = (v_{xi},v_{yi})$ jedes Himmelskörpers + mit Hilfe des expliziten Eulerschen Polygonzugverfahrens. + \par + (Wer möchte, darf natürlich auch andere Verfahren anwenden, + beispielsweise das klassische Runge-Kutta-Verfahren 4.~Ordnung.) + \item + Für eine derartige Simulation + einschließlich ihrer Darstellung als bewegte Grafik + können Sie sich von dem Beispiel-Programm \gitfile{hp}{20191205}{gtk-16.c} + inspirieren lassen. (Compilieren mit: + \lstinline[style=cmd]{gcc} + \lstinline[style=cmd]{-Wall} + \lstinline[style=cmd]{-O} + \lstinline[style=cmd]{$(pkg-config} + \lstinline[style=cmd]{--cflags} + \lstinline[style=cmd]{--libs} + \lstinline[style=cmd]{gtk+-3.0)} + \lstinline[style=cmd]{gtk-16.c} + \lstinline[style=cmd]{-o} + \lstinline[style=cmd]{gtk-16}) + \item + In einer \file{GTK+}-\lstinline{drawing_area} + liegt der Nullpunkt der Zeichnung oben links, + eine Längeneinheit entspricht einem Pixel, + und die $y$-Koordinate wächst nach unten. + Es empfiehlt sich, die Koordinaten so umzurechnen, + daß der Nullpunkt in der Mitte der Zeichnung liegt, + die Längeneinheit Ihrem persönlichen Geschmack entspricht + und die $y$-Koordinate nach oben wächst. + \item + Beispiel-Szenarien für 3 oder mehr Körper: + \vspace{-\smallskipamount} + \begin{itemize}\itemsep0pt + \item + Planet mit Mond umkreist Sonne + \item + Sonne mit mehreren Planeten, die sich gegenseitig beeinflussen + \item + zwei Sonnen umkreisen sich gegenseitig, Planet kreist drumherum + \item + Raumsonde besucht nacheinander mehrere Planeten + \end{itemize} + \end{itemize} + + \bigskip + + \strut\hfill\emph{Viel Erfolg!}\qquad\qquad + + \end{multicols} + + \vfill + + \begingroup + + \small + + \setlength{\leftskip}{3cm} + + Stand: 10.\ Dezember 2019 + +% Soweit nicht anders angegeben:\\ + Copyright \copyright\ 2014, 2015, 2018, 2019\quad Peter Gerwinski\\ + Lizenz: \mylicense + + Sie können diese Praktikumsunterlagen einschließlich \LaTeX-Quelltext +% und Beispielprogramme\\ + herunterladen unter:\\ + \url{https://gitlab.cvh-server.de/pgerwinski/hp} + + \endgroup + +\end{document} diff --git a/20191212/logo-hochschule-bochum-cvh-text-v2.pdf b/20191212/logo-hochschule-bochum-cvh-text-v2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3725a72c764b4d9ab200553474e4262161f7a5b5 Binary files /dev/null and b/20191212/logo-hochschule-bochum-cvh-text-v2.pdf differ diff --git a/20191212/logo-hochschule-bochum.pdf b/20191212/logo-hochschule-bochum.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8cad73dbb48a2b550bf29355b5a6ec895ce091f8 Binary files /dev/null and b/20191212/logo-hochschule-bochum.pdf differ diff --git a/20191212/pgscript.sty b/20191212/pgscript.sty new file mode 100644 index 0000000000000000000000000000000000000000..0a36e84e6b3087a3369e74d1a5b33fd58902993d --- /dev/null +++ b/20191212/pgscript.sty @@ -0,0 +1,137 @@ +% pgscript.sty - LaTeX Settings for Lecture Notes +% Copyright (C) 2012, 2015, 2017, 2018 Peter Gerwinski +% +% This document is free software: you can redistribute it and/or +% modify it either under the terms of the Creative Commons +% Attribution-ShareAlike 3.0 License, or under the terms of the +% GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) +% any later version. +% +% This document is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this document. If not, see <http://www.gnu.org/licenses/>. +% +% You should have received a copy of the Creative Commons +% Attribution-ShareAlike 3.0 Unported License along with this +% document. If not, see <http://creativecommons.org/licenses/>. + +\usepackage{amsfonts} +\usepackage[colorlinks,allcolors=blue]{hyperref} +\usepackage[british,german]{babel} % Yes, really "german" and not "ngerman". +\usepackage[utf8]{luainputenc} % Without this, umlauts are broken. Weird. +\usepackage{microtype} +\usepackage[T1]{fontenc} +\usepackage{times} +\usepackage{helvet} +\renewcommand*\familydefault{\sfdefault} +\usepackage{graphicx} +\usepackage{ifluatex} +\usepackage{xcolor} +\usepackage{enumerate} +\usepackage{ifthen} + +%% Repair kerning: Automatically insert "\kern{-0.15em}" between "//" % (in URLs). +%% PG20151206: This seems unnecessary here. Maybe due to \sf? +%\ifluatex +%\directlua{ +% local glyph = node.id ("glyph") +% local function my_kerning (head) +% for t in node.traverse (head) do +% if t.id == glyph and t.char == 47 then +% if t.next +% and t.next.next +% and t.next.next.id == glyph +% and t.next.next.char == 47 then +% local k = node.new ("kern") +% k.kern = tex.sp ("-0.15em") +% k.next = t.next +% k.prev = t +% t.next.prev = k +% t.next = k +% end +% end +% end +% node.kerning (head) +% end +% luatexbase.add_to_callback ("kerning", my_kerning, "URL kerning") +%} +%\fi + +\definecolor{blendedblue}{rgb}{0.2,0.2,0.7} +\definecolor{darkgreen}{rgb}{0.0,0.3,0.0} +\definecolor{darkred}{rgb}{0.7,0.0,0.0} +\definecolor{darkgrey}{rgb}{0.4,0.4,0.4} + +\newcommand{\breath}{\bigskip\goodbreak} +\newcommand{\subsubsubsection}[1]{\breath\par\textbf{#1}\nopagebreak\par} +\newenvironment{experts}{\color{darkgrey}}{} +\newenvironment{whiteout}{\definecolor{darkgreen}{rgb}{1.0,1.0,1.0}% + \definecolor{darkred}{rgb}{1.0,1.0,1.0}% + \color{white}}{} +\newenvironment{hint}{% + \begin{quote} + \addtolength{\leftskip}{0.6cm}% +% \includegraphics[width=1cm]{Zeichen_101_-_Gefahrstelle,_StVO_1970.pdf} + \makebox(0,0)[r]{\includegraphics[width=1cm]{Zeichen_101_-_Gefahrstelle,_StVO_1970.pdf}\hspace*{0.5em}}% +% \hangindent 1.2cm +% \hangafter 2 + \bfseries +% Foobar Foobar Foobar Foobar Foobar Foobar Foobar Foobar +% Foobar Foobar Foobar Foobar Foobar Foobar Foobar Foobar +% Foobar Foobar Foobar Foobar Foobar Foobar Foobar Foobar +% Foobar Foobar Foobar Foobar Foobar Foobar Foobar Foobar + \ignorespaces +}{% + \end{quote} +} +\urlstyle{sf} +\newcommand{\file}[1]{{\color{blendedblue}#1}} +\newcommand{\textarrow}{{\boldmath $\longrightarrow$}} +\newcommand{\arrowitem}{\item[\textarrow]} +\newcommand{\newterm}[1]{\emph{\color{darkgreen}#1}} + +\newcounter{exercise} +\newcommand{\exercise}[1]{\addtocounter{exercise}{1}\subsection*{Aufgabe \arabic{exercise}: #1}} +\newcommand{\solution}{\subsubsection*{Lösung}} + +\newcounter{points} +\newcommand{\points}[1]{\ifthenelse{#1=1}{(1 Punkt)}{(#1 Punkte)}\addtocounter{points}{#1}} + +\newcommand{\gitfile}[3]{\href{https://gitlab.cvh-server.de/pgerwinski/#1/raw/master/#2/#3}{\file{#3}}} + +\usepackage{listings} +\lstset{basicstyle=\color{blendedblue}, + language=C, + captionpos=b, + gobble=4, + xleftmargin=1em, + columns=fullflexible, + moredelim=**[is][\color{red}]{¡}{¿}} +\lstdefinestyle{numbered}{xleftmargin=2em, + numbers=left, + numberstyle=\footnotesize\color{gray}} +\lstdefinestyle{terminal}{basicstyle=\ttfamily\color{darkgreen}, + language={}, + columns=fixed, + moredelim=**[is][\color{darkred}]{¡}{¿}, + moredelim=**[is][\color{blendedblue}]{°}{¿}, + moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}} +\lstdefinestyle{cmd}{basicstyle=\ttfamily\color{darkred}, + language={}, + columns=fixed, + moredelim=**[is][\color{darkgreen}]{¡}{¿}, + moredelim=**[is][\color{blendedblue}]{°}{¿}, + moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}} + +\setlength{\textwidth}{16.5cm} +\setlength{\textheight}{26.0cm} +\setlength{\hoffset}{-1.5cm} +\setlength{\voffset}{-3.0cm} +\setlength{\parindent}{0pt} +\setlength{\parskip}{\medskipamount} +\setlength{\unitlength}{1cm} diff --git a/20191212/pgslides.sty b/20191212/pgslides.sty new file mode 100644 index 0000000000000000000000000000000000000000..9a019ce99f03d27a17942facc56fe2145f46b6a6 --- /dev/null +++ b/20191212/pgslides.sty @@ -0,0 +1,233 @@ +% pgslides.sty - LaTeX Settings for Lecture Slides +% Copyright (C) 2012, 2013 Peter Gerwinski +% +% This document is free software: you can redistribute it and/or +% modify it either under the terms of the Creative Commons +% Attribution-ShareAlike 3.0 License, or under the terms of the +% GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) +% any later version. +% +% This document is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this document. If not, see <http://www.gnu.org/licenses/>. +% +% You should have received a copy of the Creative Commons +% Attribution-ShareAlike 3.0 Unported License along with this +% document. If not, see <http://creativecommons.org/licenses/>. + +\usepackage{amsfonts} +\usepackage[british,german]{babel} % Yes, really "german" and not "ngerman". +\usepackage[utf8]{luainputenc} % Without this, umlauts are broken. Weird. +\usepackage{microtype} +\usepackage[T1]{fontenc} +\usepackage{times} +\usepackage{helvet} +\renewcommand*\familydefault{\sfdefault} +\usepackage{graphicx} +\usepackage{pstricks} + +\hypersetup{colorlinks,allcolors=blue} + +%% @@@ Not necessary for slides. Why??? +%% Repair kerning: Automatically insert "\kern{-0.15em}" between "//" % (in URLs). +%\directlua{ +% local glyph = node.id ("glyph") +% local function my_kerning (head) +% for t in node.traverse (head) do +% if t.id == glyph and t.char == 47 then +% if t.next +% and t.next.next +% and t.next.next.id == glyph +% and t.next.next.char == 47 then +% local k = node.new ("kern") +% k.kern = tex.sp ("-0.15em") +% k.next = t.next +% k.prev = t +% t.next.prev = k +% t.next = k +% end +% end +% end +% node.kerning (head) +% end +% luatexbase.add_to_callback ("kerning", my_kerning, "URL kerning") +%} + +\usetheme{default} +\usefonttheme{structurebold} +\setbeamertemplate{navigation symbols}{} +\setbeamersize{text margin left = 0.3cm, text margin right = 0.2cm} +\setbeamertemplate{itemize item}{$\bullet$} +\setbeamertemplate{itemize subitem}{--} +\setbeamerfont{itemize/enumerate subbody}{size=\normalsize} +\setbeamerfont{itemize/enumerate subsubbody}{size=\normalsize} +\setbeamercolor{footline}{fg=gray} + +\newcommand{\sep}{~$\cdot$~} + +\newif\ifminimalistic +\minimalistictrue + +\institute[Hochschule Bochum\sep CVH]{% + \makebox(0,0.005)[tl]{\includegraphics[scale=0.72]{logo-hochschule-bochum-cvh-text-v2.pdf}}\hfill + \makebox(0,0)[tr]{\includegraphics[scale=0.5]{logo-hochschule-bochum.pdf}}% +} + +\setbeamertemplate{headline}{% + \leavevmode + \hbox to \textwidth{% + \ifminimalistic + \strut\hfill + \else + \rule{0pt}{5.7pt}% + \hspace*{8.55pt}\insertinstitute\hspace*{5.7pt}% + \raisebox{-30pt}{\rule{0pt}{1pt}}% + \fi + }% + \vskip0pt% +} + +\iffalse + \setbeamertemplate{footline}{} +\else + \setbeamertemplate{footline}{% + \leavevmode + \hbox to \textwidth{% + \usebeamercolor{footline}% + \usebeamerfont{footline}% + \ifminimalistic + \strut\hfill + \else + \,\insertshorttitle\sep + \insertshortauthor\sep + \insertshortinstitute\sep + \insertshortdate\hfill + \fi + \insertframenumber/\inserttotalframenumber + %Folie\,\insertframenumber\sep Seite\,\insertpagenumber\, + }% + \vskip0pt% + } +\fi + +\newcommand{\maketitleframe}{% + \ifminimalistic + \begin{frame}[t,plain] + \insertinstitute + \par\vfill + \begin{center} + {\LARGE\color{structure}\inserttitle\par}\bigskip\bigskip + {\large \insertauthor\par}\bigskip\medskip + \insertdate + \end{center} + \end{frame} + \else + \begin{frame} + \vfill + \begin{center} + {\LARGE\color{structure}\inserttitle\par}\bigskip\bigskip + {\large \insertauthor\par}\bigskip\medskip + \insertdate + \end{center} + \vfill + \end{frame} + \fi +} + +\definecolor{medgreen}{rgb}{0.0,0.5,0.0} +\definecolor{darkgreen}{rgb}{0.0,0.3,0.0} +\definecolor{lightred}{rgb}{1.0,0.7,0.7} +\definecolor{medred}{rgb}{0.5,0.0,0.0} +\definecolor{bored}{rgb}{0.89,0.0,0.098} +\definecolor{lightgray}{rgb}{0.85,0.85,0.85} +\definecolor{orange}{rgb}{1.0,0.5,0.0} +\definecolor{darkgray}{rgb}{0.4,0.4,0.4} + +\newenvironment{experts}{\color{darkgray}}{} + +\usepackage{listings} +\lstset{basicstyle=\color{structure}, + language=C, + captionpos=b, + gobble=4, + columns=fullflexible, + aboveskip=0pt, + belowskip=0pt, + moredelim=**[is][\color{structure}]{¡}{¿}, + moredelim=**[is][\only<2->{\color{structure}}]{²}{¿}, + moredelim=**[is][\only<3->{\color{structure}}]{³}{¿}, + moredelim=**[is][\only<4->{\color{structure}}]{°}{¿}, + moredelim=**[is][\only<5->{\color{structure}}]{¤}{¿}, + moredelim=**[is][\only<6->{\color{structure}}]{¢}{¿}, + moredelim=**[is][\only<7->{\color{structure}}]{æ}{¿}, + moredelim=**[is][\only<8->{\color{structure}}]{ø}{¿}} +\lstdefinestyle{terminal}{basicstyle=\ttfamily\color{darkgreen}, + language={}, + columns=fixed, + moredelim=**[is][\color{red}]{¡}{¿}, + moredelim=**[is][\color{blendedblue}]{°}{¿}, + moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}} +\lstdefinestyle{cmd}{basicstyle=\ttfamily\color{red}, + language={}, + gobble=2, + columns=fixed, + moredelim=**[is][\color{darkgreen}]{¡}{¿}, + moredelim=**[is][\color{structure}]{°}{¿}, + moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}} +\lstdefinestyle{shy}{basicstyle=\color{lightgray}} + +\setcounter{topnumber}{3} +\renewcommand\topfraction{0.7} +\setcounter{bottomnumber}{3} +\renewcommand\bottomfraction{0.7} +\setcounter{totalnumber}{5} +\renewcommand\textfraction{0.1} +\renewcommand\floatpagefraction{0.9} + +\setlength{\unitlength}{1cm} + +\newcommand{\protectfile}[1]{#1} +\urlstyle{sf} +\newcommand{\file}[1]{{\color{structure}\protectfile{#1}}} +\newcommand{\textarrow}{{\boldmath $\longrightarrow$}} +\newcommand{\arrowitem}{\item[\textarrow]} +\newcommand{\newterm}[1]{\emph{\color{darkgreen}#1}} +\newcommand{\BIGskip}{\vspace{1cm}} +\newcommand{\shy}{\color{lightgray}} +\newcommand{\hot}{\color{red}} +\newcommand{\shyhot}{\color{lightred}} + +\newcommand{\sectionnonumber}[1]{\section{#1}\addtocounter{section}{-1}} + +\def\showsectionnonumber{\hbox{\Large\color{structure}\bf + \vtop{\secname}\par}\bigskip} + +\newcommand{\nosectionnonumber}[1]{\gdef\nosectionnonumbername{#1}} + +\def\shownosectionnonumber{\hbox{\Large\color{structure}\bf + \vtop{\nosectionnonumbername}\par}\bigskip} + +\def\showsection{\hbox{\Large\color{structure}\bf + \vtop{\hbox{\arabic{section}}}\kern1em% + \vtop{\secname}\par}\bigskip} + +\newcommand{\subsectionnonumber}[1]{\subsection{#1}\addtocounter{subsection}{-1}} + +\def\showsubsectionnonumber{{\large\color{structure}\bf\subsecname\par}\bigskip} + +\def\showsubsection{\hbox{\large\color{structure}\bf + \vtop{\hbox{\arabic{section}.\arabic{subsection}}}\kern1em% + \vtop{\subsecname}\par}\bigskip} + +\newcommand{\subsubsectionnonumber}[1]{\subsubsection{#1}\addtocounter{subsubsection}{-1}} + +\def\showsubsubsectionnonumber{{\normalsize\color{structure}\bf\subsubsecname\par}\bigskip} + +\def\showsubsubsection{\hbox{\normalsize\color{structure}\bf + \vtop{\hbox{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}}\kern1em% + \vtop{\subsubsecname}\par}\bigskip}