PDF docs: generate LaTeX header file from source

The LaTeX header file used when creating PDF documentation depends on
the doxygen and latex versions, respectively.

The old header file 'documentation/src/fltk-book.tex.in' had been
generated manually and needed to be updated for new doxygen versions
which made the PDF documentation generation dependent on the
doxygen/latex versions on the build system.

The new LaTeX header file 'fltk-book.tex' is generated by doxygen,
i.e. taking into account the doxygen and latex versions on the build
system and "edited" to include the page title defined in the new
file 'documentation/src/fltk-title.tex.in'.

This makes the PDF documentation independent of the doxygen and
latex versions of the build system.
This commit is contained in:
Albrecht Schlosser 2020-09-20 14:44:14 +02:00
parent f072cec13f
commit b713b91975
5 changed files with 115 additions and 180 deletions

View File

@ -36,13 +36,13 @@ if (OPTION_BUILD_HTML_DOCUMENTATION)
set (GENERATE_LATEX NO)
set (LATEX_HEADER "")
configure_file(
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
@ONLY
)
configure_file(
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/src/tiny.png
${CMAKE_CURRENT_BINARY_DIR}/html/tiny.png
COPYONLY
@ -51,7 +51,6 @@ if (OPTION_BUILD_HTML_DOCUMENTATION)
# generate html docs
add_custom_target (html
# ALL
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating HTML documentation" VERBATIM
@ -73,28 +72,31 @@ if (OPTION_BUILD_PDF_DOCUMENTATION)
set (GENERATE_LATEX YES)
set (LATEX_HEADER "${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex")
configure_file(
# strip potential " (Git-hash)" from the original version
string (REGEX REPLACE " .*$" "" DOXY_VERSION ${DOXYGEN_VERSION})
execute_process (COMMAND date +%Y
OUTPUT_VARIABLE YEAR
)
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxybook
@ONLY
)
# generate LaTeX header fltk-book.tex
set (DOXY_VERSION ${DOXYGEN_VERSION})
execute_process (COMMAND date +%Y
OUTPUT_VARIABLE YEAR
)
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/src/fltk-book.tex.in
${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/src/fltk-title.tex.in
${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex
@ONLY
)
# generate fltk.pdf
add_custom_command(
add_custom_command (
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_header
${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex
${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex
COMMAND ${DOXYGEN_EXECUTABLE} Doxybook
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_pdf
COMMAND cp -f latex/refman.pdf fltk.pdf
@ -105,7 +107,6 @@ if (OPTION_BUILD_PDF_DOCUMENTATION)
# add target 'pdf'
add_custom_target (pdf
# ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
)
@ -117,8 +118,7 @@ endif (OPTION_BUILD_PDF_DOCUMENTATION)
if (DOCS)
add_custom_target(docs
# ALL
add_custom_target (docs
DEPENDS ${DOCS}
)

View File

@ -66,7 +66,7 @@ dist: docs
clean:
$(RM) Doxyfile Doxybook
$(RM) fltk.pdf refman.pdf src/fltk-book.tex
$(RM) fltk.pdf refman.pdf src/fltk-book.tex src/fltk-book.tex.in
$(RMDIR) html latex
$(RM) *~ *.bck *.bak *.log
$(RM) $(MANPAGES) $(SRC_DOCDIR)/*.0
@ -180,9 +180,14 @@ refman.pdf: $(HTMLFILES) Doxybook src/fltk-book.tex
./make_pdf
src/fltk-book.tex: src/fltk-book.tex.in
DOXY_VERSION=`$(DOXYDOC) --version`; \
echo "Generating $@ ..."
DOXY_VERSION=`$(DOXYDOC) --version|cut -f1 -d' '`; \
YEAR=`date +%Y`; \
sed -e"s/@YEAR@/$$YEAR/g" \
-e"s/@FLTK_VERSION@/$(FLTK_VERSION)/g" \
-e"s/@DOXY_VERSION@/$$DOXY_VERSION/g" \
< $< > $@
src/fltk-book.tex.in: src/fltk-title.tex.in
echo "Generating $@ ..."
./make_header src/fltk-title.tex.in src/fltk-book.tex.in

58
documentation/make_header Executable file
View File

@ -0,0 +1,58 @@
#!/bin/sh
#
# Create a new LaTeX header file for doxygen PDF docs
#
# Note: this LaTeX file depends on Doxygen and LaTeX versions, resp.
# and needs therefore to be created with current Doxygen and LaTeX
# versions on the build system.
#
# Usage:
#
# $ sh make_header input-file output-file
#
# where 'input-file' is the pure (LaTeX) title page (template)
# and 'output-file' is the generated (LaTeX) title page (template)
# to be used by `make' or `cmake` to generate the final LaTeX page
# header (combined doxygen template + FLTK title page).
#
#=======================================================================
# This script requires a posix shell and uses the following commands:
# cat, rm and sed and (obviously) doxygen
#=======================================================================
# input and output file names
FLTK_HEAD="$1"
DOXY_HEAD="$2"
# temp file
DOXY_TEMP="doxy-header.tex.$$"
if test x$FLTK_HEAD = x; then
echo "usage: $0 fltk-header-file output-file"
exit 1
fi
if test x$DOXY_HEAD = x; then
echo "usage: $0 fltk-header-file output-file"
exit 1
fi
# Create the doxygen LaTeX header template and replace the LaTeX
# code between (and including) the lines containing
# - 'begin{titlepage}' and
# - 'end{titlepage}'
# with our PDF document title page (LaTeX code) and write the
# result to $DOXY_HEAD.
doxygen -w latex $DOXY_TEMP /dev/null /dev/null
# combine three parts of these files to the output file
# using '( ... ) > $DOXY_HEAD' to write (concatenate)
# all three parts to one file
( sed -e'/begin{titlepage}/,$d' < $DOXY_TEMP
cat $FLTK_HEAD
sed -e'1,/end{titlepage}/d' < $DOXY_TEMP
) > $DOXY_HEAD
# cleanup
rm -f $DOXY_TEMP

View File

@ -1,161 +0,0 @@
% Latex header for FLTK generated by doxygen 1.8.13
\batchmode
\documentclass[twoside]{book}
% Packages required by doxygen
\usepackage{fixltx2e}
\usepackage{calc}
\usepackage{doxygen}
\usepackage[export]{adjustbox} % also loads graphicx
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\usepackage{multicol}
\usepackage{multirow}
\PassOptionsToPackage{warn}{textcomp}
\usepackage{textcomp}
\usepackage[nointegrals]{wasysym}
\usepackage[table]{xcolor}
% Font selection
\usepackage[T1]{fontenc}
\usepackage[scaled=.90]{helvet}
\usepackage{courier}
\usepackage{amssymb}
\usepackage{sectsty}
\renewcommand{\familydefault}{\sfdefault}
\allsectionsfont{%
\fontseries{bc}\selectfont%
\color{darkgray}%
}
\renewcommand{\DoxyLabelFont}{%
\fontseries{bc}\selectfont%
\color{darkgray}%
}
\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
% Page & text layout
\usepackage{geometry}
\geometry{%
a4paper,%
top=2.5cm,%
bottom=2.5cm,%
left=2.5cm,%
right=2.5cm%
}
\tolerance=750
\hfuzz=15pt
\hbadness=750
\setlength{\emergencystretch}{15pt}
\setlength{\parindent}{0cm}
\setlength{\parskip}{3ex plus 2ex minus 2ex}
\makeatletter
\renewcommand{\paragraph}{%
\@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
\normalfont\normalsize\bfseries\SS@parafont%
}%
}
\renewcommand{\subparagraph}{%
\@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
\normalfont\normalsize\bfseries\SS@subparafont%
}%
}
\makeatother
% Headers & footers
\usepackage{fancyhdr}
\pagestyle{fancyplain}
\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}}
\fancyhead[CE]{\fancyplain{}{}}
\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}}
\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}}
\fancyhead[CO]{\fancyplain{}{}}
\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}}
\fancyfoot[LE]{\fancyplain{}{}}
\fancyfoot[CE]{\fancyplain{}{}}
\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }}
\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }}
\fancyfoot[CO]{\fancyplain{}{}}
\fancyfoot[RO]{\fancyplain{}{}}
\renewcommand{\footrulewidth}{0.4pt}
\renewcommand{\chaptermark}[1]{%
\markboth{#1}{}%
}
\renewcommand{\sectionmark}[1]{%
\markright{\thesection\ #1}%
}
% Indices & bibliography
\usepackage{natbib}
\usepackage[titles]{tocloft}
\setcounter{tocdepth}{3}
\setcounter{secnumdepth}{5}
\makeindex
% Hyperlinks (required, but should be loaded last)
\usepackage{ifpdf}
\ifpdf
\usepackage[pdftex,pagebackref=true]{hyperref}
\else
\usepackage[ps2pdf,pagebackref=true]{hyperref}
\fi
\hypersetup{%
colorlinks=true,%
linkcolor=blue,%
citecolor=blue,%
unicode%
}
% Custom commands
\newcommand{\clearemptydoublepage}{%
\newpage{\pagestyle{empty}\cleardoublepage}%
}
\usepackage{caption}
\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}
%===== C O N T E N T S =====
\begin{document}
% Titlepage & ToC
\hypersetup{pageanchor=false,
bookmarksnumbered=true,
pdfencoding=unicode
}
\pagenumbering{alph}
\begin{titlepage}
\vspace*{5cm}
\begin{center}%
{\Huge FLTK @FLTK_VERSION@ Programming Manual}\\
\vspace*{2cm}
\begin{DoxyImageNoCaption}
\mbox{\includegraphics[width=6cm]{FL200.png}}
\end{DoxyImageNoCaption}\\
\vspace*{2cm}
{\Large
Revision 11 by F. Costantini, D. Gibson, M. Melcher, \\
A. Schlosser, B. Spitzak, and M. Sweet.}\\
\vspace*{1.5cm}
{\large Copyright 1998-@YEAR@ by Bill Spitzak and others.}\\
\vspace*{0.75cm}
{\small
This software and manual are provided under the terms of the GNU Library General Public License.}\\
{\small
Permission is granted to reproduce this manual or any portion for any purpose,}\\
{\small
provided this copyright and permission notice are preserved.}\\
\vspace*{2.5cm}
{\large Generated by Doxygen @DOXY_VERSION@}\\
\vspace*{0.5cm}
\today{}\\
\end{center}
\end{titlepage}
\clearemptydoublepage
\pagenumbering{roman}
\tableofcontents
\clearemptydoublepage
\pagenumbering{arabic}
\hypersetup{pageanchor=true}
%--- Begin generated contents ---

View File

@ -0,0 +1,33 @@
%
% FLTK PDF documentation title page (LaTeX)
%
\begin{titlepage}
\vspace*{5cm}
\begin{center}%
{\Huge FLTK @FLTK_VERSION@ Programming Manual}\\
\vspace*{2cm}
\begin{DoxyImageNoCaption}
\mbox{\includegraphics[width=6cm]{FL200.png}}
\end{DoxyImageNoCaption}\\
\vspace*{2cm}
{\Large
Revision 11 by F. Costantini, D. Gibson, M. Melcher, \\
A. Schlosser, B. Spitzak, and M. Sweet.}\\
\vspace*{1.5cm}
{\large Copyright 1998-@YEAR@ by Bill Spitzak and others.}\\
\vspace*{0.75cm}
{\small
This software and manual are provided under the terms of the GNU Library General Public License.}\\
{\small
Permission is granted to reproduce this manual or any portion for any purpose,}\\
{\small
provided this copyright and permission notice are preserved.}\\
\vspace*{2.5cm}
{\large Generated by Doxygen @DOXY_VERSION@}\\
\vspace*{0.5cm}
\today{}\\
\end{center}
\end{titlepage}
%
% end of FLTK PDF documentation title page (LaTeX)
%