summaryrefslogtreecommitdiff
path: root/macros/luatex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex')
-rw-r--r--macros/luatex/latex/luatodonotes/luatodonotes.dtx82
-rw-r--r--macros/luatex/latex/luatodonotes/luatodonotes.ins4
-rw-r--r--macros/luatex/latex/luatodonotes/luatodonotes.lua59
-rw-r--r--macros/luatex/latex/luatodonotes/luatodonotes.pdfbin212809 -> 215081 bytes
4 files changed, 112 insertions, 33 deletions
diff --git a/macros/luatex/latex/luatodonotes/luatodonotes.dtx b/macros/luatex/latex/luatodonotes/luatodonotes.dtx
index 2351cfbf6c..1d634a6fc8 100644
--- a/macros/luatex/latex/luatodonotes/luatodonotes.dtx
+++ b/macros/luatex/latex/luatodonotes/luatodonotes.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2014-2017 by Fabian Lipp <fabian.lipp@gmx.de>
+% Copyright (C) 2014-2020 by Fabian Lipp <fabian.lipp@gmx.de>
% based on the todonotes package
% by Henrik Skov Midtiby <henrikmidtiby@gmail.com>
% ------------------------------------------------------------
@@ -24,7 +24,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{luatodonotes}
%<*package>
- [2017/09/30 v0.4 luatodonotes source and documentation.]
+ [2020/02/16 v0.5 luatodonotes source and documentation.]
%</package>
%
%<*driver>
@@ -32,7 +32,7 @@
\usepackage{wrapfig}
\PassOptionsToPackage{colorlinks, urlcolor=blue}{hyperref}
\usepackage{hypdoc} % this package loads hyperref among others
-\usepackage[colorinlistoftodos, shadow]{luatodonotes}[2017/09/30]
+\usepackage[colorinlistoftodos, shadow]{luatodonotes}[2020/02/16]
\usepackage{fontspec}
\usepackage{amsmath}
\usepackage{setspace}
@@ -51,7 +51,7 @@
%</driver>
% \fi
%
-% \CheckSum{906}
+% \CheckSum{951}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -742,7 +742,7 @@
% l.250 \directlua{require("luatodonotes")}
% \end{verbatim}
% This means that the file |luatodonotes.lua| cannot be found by Lua\TeX.
-% It depends on the version of your \TeX{} installation. in which directories
+% It depends on the version of your \TeX{} installation in which directories
% Lua\TeX{} is looking for Lua source files.
% You can query these paths with the following command:
% \begin{verbatim}
@@ -933,6 +933,12 @@
% placed in \texttt{\textbackslash caption}, e.g.)}
% \changes{0.3}{2015/11/30}{Remove two variables from Lua global namespace}
% \changes{0.3}{2015/12/02}{Less console output unless debug option is set}
+% \changes{0.5}{2020/01/19}{Fixed bugs when using \texttt{poLeadersAvoidLines}
+% as positioning algorithm in newer LuaTeX versions because some APIs have
+% changed}
+% \changes{0.5}{2020/01/20}{Bugfix: The line position calculation didn't use
+% the current page height, which caused an offset on these positions in
+% documents not using a4paper}
% \end{environment}
%
% \subsection{Dependencies and definitions}
@@ -1316,6 +1322,11 @@
% \changes{0.3}{2015/12/01}{Introduce package option \texttt{additionalMargin}}
% \changes{0.4}{2016/04/01}{Fixed problems of the \texttt{additionalMargin}
% option with certain documentclasses}
+% \changes{0.5}{2017/11/21}{Make \texttt{additionalMargin} compatible with
+% \texttt{\textbackslash newgeometry}}
+% \changes{0.5}{2020/01/19}{Adapt to new LuaTeX versions, which provide command
+% \texttt{\textbackslash pagewidth} instead of
+% \texttt{\textbackslash pdfpagewidth} (but stay backwards compatible)}
% \begin{macrocode}
\newif{\if@todonotes@additionalMarginEnabled}
\@todonotes@additionalMarginEnabledfalse
@@ -1363,20 +1374,34 @@
\fi
% \end{macrocode}
% If the option |additionalMargin| is given, we enlarge the margins for the notes.
-% We simply increase the page size by the doubled value of |additionalMargin|
-% and move the contents to the right using |\hoffset|.
% \begin{macrocode}
\if@todonotes@additionalMarginEnabled
\newlength{\@todonotes@modpaperwidth}
\AfterEndPreamble{%
- \setlength{\@todonotes@modpaperwidth}{\paperwidth}%
- \addtolength{\@todonotes@modpaperwidth}{\@todonotes@additionalMargin}%
- \addtolength{\@todonotes@modpaperwidth}{\@todonotes@additionalMargin}%
- \pdfpagewidth=\@todonotes@modpaperwidth%
- \addtolength{\hoffset}{\@todonotes@additionalMargin}%
+ \@todonotes@setAdditionalMargin%
+% \end{macrocode}
+% Additionally, if the |geometry| package is loaded we hook into
+% |\Gm@changelayout| to repeat this computation whenever |\newgeometry| is
+% called.
+% \begin{macrocode}
+ \ifdefined\Gm@changelayout
+ \g@addto@macro{\Gm@changelayout}{\@todonotes@setAdditionalMargin}
+ \fi
}%
\fi%
% \end{macrocode}
+% We simply increase the page size by the doubled value of |additionalMargin|
+% and move the contents to the right using |\hoffset|.
+% \begin{macrocode}
+\newcommand{\@todonotes@setAdditionalMargin}{
+ \setlength{\@todonotes@modpaperwidth}{\paperwidth}%
+ \addtolength{\@todonotes@modpaperwidth}{\@todonotes@additionalMargin}%
+ \addtolength{\@todonotes@modpaperwidth}{\@todonotes@additionalMargin}%
+ \ifdefined\pdfpagewidth\else\let\pdfpagewidth\pagewidth\fi
+ \pdfpagewidth=\@todonotes@modpaperwidth%
+ \addtolength{\hoffset}{\@todonotes@additionalMargin}%
+}
+% \end{macrocode}
% \subsection{Initialisation of our Lua code}
% In this part we define some of the variables used by Lua depending on the
% package options and do some other initialisation tasks.
@@ -1456,6 +1481,7 @@
% We need this workaround because we cannot insert |\pdflastypos| directly into
% the tokenlist in the Lua callback \texttt{callbackOutputLinePositions()}.
% \begin{macrocode}
+\ifdefined\pdflastypos\else\let\pdflastypos\lastypos\fi
\def\@todonotes@pdflastypos{\the\pdflastypos}
% \end{macrocode}
% The following commands are written to the temporary \texttt{lpo}-file.
@@ -1493,6 +1519,18 @@
{\AtBeginShipoutUpperLeft}
\fi
% \end{macrocode}
+% Define commands that are used for every tikzpicture to disable
+% externalization.
+% We only call the |\tikzexternaldisable| command if it is defined (i.e., the
+% externalization library for TikZ is loaded).
+% Externalization is reenabled after the end of the group (if it was enabled
+% before).
+% \changes{0.5}{2018/04/08}{Disable TikZ externalization for our tikzpictures}
+% \begin{macrocode}
+\newcommand{\@todonotes@before@tikzpict}{\begingroup%
+ \ifdefined\tikzexternaldisable\tikzexternaldisable\fi}
+\newcommand{\@todonotes@after@tikzpict}{\endgroup}
+% \end{macrocode}
% Initialise the script when all Lua variables are set according to the package
% options.
% \begin{macrocode}
@@ -1532,6 +1570,7 @@
{@todonotes@\arabic{@todonotes@numberoftodonotes}%
@\arabic{@todonotes@numberofLinesInArea} }%
\hspace*{\todonotes@textmark@shift}{\smash{%
+ \@todonotes@before@tikzpict%
\begin{tikzpicture}[overlay,remember picture,
deco/.style={}]%
\setlength\todonotes@textmark@linebelow%
@@ -1560,7 +1599,8 @@
-- (\@todonotes@nodeNamePrefix areaSE)
}
-- cycle;
- \end{tikzpicture}%
+ \end{tikzpicture}%
+ \@todonotes@after@tikzpict%
}}%
}%
% \end{macrocode}
@@ -1828,10 +1868,12 @@
% Mark the end of the highlighted area with a Tikz coordinate.
% The begin is marked by |\@todocommon|.
% \begin{macrocode}
+ \@todonotes@before@tikzpict%
\begin{tikzpicture}[remember picture, overlay]%
\node [coordinate] (@todonotes@\arabic{@todonotes@numberoftodonotes} %
inTextEnd) {};%
\end{tikzpicture}%
+ \@todonotes@after@tikzpict%
\zref@label{@todonotes@\arabic{@todonotes@numberoftodonotes}@end}%
}%
% \end{macrocode}
@@ -1846,10 +1888,12 @@
% First is the current location in the document stored, this enables
% us later to connect this point with the inserted todonote.
% \begin{macrocode}
+ \@todonotes@before@tikzpict%
\begin{tikzpicture}[remember picture, overlay]%
\node [coordinate] (@todonotes@\arabic{@todonotes@numberoftodonotes} %
inText) {};%
\end{tikzpicture}%
+ \@todonotes@after@tikzpict%
% \end{macrocode}
% Update the dimensions to be accessed by Lua.
% \begin{macrocode}
@@ -1937,7 +1981,9 @@
% Define helper function |drawInlineNote|.
% \begin{macrocode}
\newcommand{\@todonotes@drawInlineNote}{%
- {\par\noindent\begin{tikzpicture}[remember picture]%
+ {\par\noindent%
+ \@todonotes@before@tikzpict%
+ \begin{tikzpicture}[remember picture]%
\draw node[@todonotes@inlinenote,font=\@todonotes@sizecommand]{%
\if@todonotes@authorgiven%
{\noindent \@todonotes@sizecommand %
@@ -1945,7 +1991,9 @@
\else%
{\noindent \@todonotes@sizecommand \@todonotes@text}%
\fi};%
- \end{tikzpicture}\par}%
+ \end{tikzpicture}%
+ \@todonotes@after@tikzpict%
+ \par}%
}%
% \end{macrocode}
% \end{macro}
@@ -1957,6 +2005,7 @@
\addcontentsline{tdo}{todo}{\@todonotes@MissingFigureText: #2}%
\par
\noindent
+\@todonotes@before@tikzpict%
\begin{tikzpicture}
\draw[fill=\@todonotes@currentfigcolor, draw = black!40, line width=2pt]
(-2, -2.5) rectangle +(\@todonotes@currentfigwidth, \@todonotes@currentfigheight);
@@ -1967,6 +2016,7 @@
\draw (0, 0.3) node {\@todonotes@MissingFigureUp};
\draw (0, -0.3) node {\@todonotes@MissingFigureDown};
\end{tikzpicture}\hfill
+\@todonotes@after@tikzpict%
}% Ending \missingfigure command
\fi% Ending \@todonotes@ifdisabled
% \end{macrocode}
@@ -2054,6 +2104,7 @@
% \begin{macrocode}
\raisebox{\voffset}{%
\hspace{-\hoffset}%
+ \@todonotes@before@tikzpict%
\begin{tikzpicture}[remember picture,overlay]
% \end{macrocode}
% Reads the absolute coordinates of every note on the page and writes them to
@@ -2065,6 +2116,7 @@
% \begin{macrocode}
\directlua{luatodonotes.printNotes()}
\end{tikzpicture}%
+ \@todonotes@after@tikzpict%
}%
% \end{macrocode}
% Delete the drawn notes from the Lua lists and prepare for the next page.
diff --git a/macros/luatex/latex/luatodonotes/luatodonotes.ins b/macros/luatex/latex/luatodonotes/luatodonotes.ins
index 1fc75094df..bfaeb98a7e 100644
--- a/macros/luatex/latex/luatodonotes/luatodonotes.ins
+++ b/macros/luatex/latex/luatodonotes/luatodonotes.ins
@@ -1,5 +1,5 @@
%%
-%% Copyright (C) 2014-2015 by Fabian Lipp <fabian.lipp@gmx.de>
+%% Copyright (C) 2014-2020 by Fabian Lipp <fabian.lipp@gmx.de>
%% based on the todonotes package by
%% Henrik Skov Midtiby <henrikmidtiby@gmail.com>
%%
@@ -23,7 +23,7 @@
This is a generated file.
-Copyright (C) 2014-2015 by Fabian Lipp <fabian.lipp@gmx.de>
+Copyright (C) 2014-2020 by Fabian Lipp <fabian.lipp@gmx.de>
based on the todonotes package by
Henrik Skov Midtiby <henrikmidtiby@gmail.com>
diff --git a/macros/luatex/latex/luatodonotes/luatodonotes.lua b/macros/luatex/latex/luatodonotes/luatodonotes.lua
index 5ef9b8f03b..1926597ab9 100644
--- a/macros/luatex/latex/luatodonotes/luatodonotes.lua
+++ b/macros/luatex/latex/luatodonotes/luatodonotes.lua
@@ -1,5 +1,5 @@
--
--- Copyright (C) 2014-2015 by Fabian Lipp <fabian.lipp@gmx.de>
+-- Copyright (C) 2014-2020 by Fabian Lipp <fabian.lipp@gmx.de>
-- ------------------------------------------------------------
--
-- This file may be distributed and/or modified under the
@@ -374,8 +374,7 @@ function luatodonotes.linePositionsNextPage()
end
function luatodonotes.linePositionsAddLine(ycoord, lineheight, linedepth)
- local baseline = ycoord - tex.pageheight
- linePositionsCurPage[#linePositionsCurPage + 1] = {baseline, baseline + lineheight, baseline - linedepth}
+ linePositionsCurPage[#linePositionsCurPage + 1] = {ycoord, lineheight, linedepth}
end
@@ -741,7 +740,7 @@ function luatodonotes.callbackOutputLinePositions(head)
end
if foundGlyph then
- local w = node.new("whatsit", "write") -- 8/1
+ local w = node.new("whatsit", "write")
w.stream = lpoFileStream
local tokenlist = {
{12, 92, 0}, -- \
@@ -770,19 +769,31 @@ function luatodonotes.callbackOutputLinePositions(head)
{12, 110, 0}, -- n
{12, 123, 0} -- {
}
- t = token.create("@todonotes@pdflastypos")
- tokenlist[#tokenlist + 1] = t
- tokenlist[#tokenlist + 1] = {12, 125, 0}
- tokenlist[#tokenlist + 1] = {12, 123, 0}
+ local t = token.create("@todonotes@pdflastypos")
+ -- the token handling changed with newer LuaTeX versions
+ if tex.luatexversion > 81 then
+ tokenlist[#tokenlist + 1] = {0, t.tok}
+ else
+ tokenlist[#tokenlist + 1] = t
+ end
+ tokenlist[#tokenlist + 1] = {12, 125, 0} -- }
+ tokenlist[#tokenlist + 1] = {12, 123, 0} -- {
appendStrToTokenlist(tokenlist, tostring(head.height))
- tokenlist[#tokenlist + 1] = {12, 125, 0}
- tokenlist[#tokenlist + 1] = {12, 123, 0}
+ tokenlist[#tokenlist + 1] = {12, 125, 0} -- }
+ tokenlist[#tokenlist + 1] = {12, 123, 0} -- {
appendStrToTokenlist(tokenlist, tostring(head.depth))
- tokenlist[#tokenlist + 1] = {12, 125, 0}
+ tokenlist[#tokenlist + 1] = {12, 125, 0} -- }
w.data = tokenlist
head.head = node.insert_before(head.head,head.head,w)
- local w = node.new("whatsit", "pdf_save_pos") -- 8/23
+ -- the name of the whatsit node changed with newer LuaTeX versions
+ local whatsitName
+ if tex.luatexversion > 80 then
+ whatsitName = "save_pos"
+ else
+ whatsitName = "pdf_save_pos"
+ end
+ local w = node.new("whatsit", whatsitName)
head.head = node.insert_before(head.head,head.head,w)
end
end
@@ -1742,7 +1753,18 @@ end
local function posPoLeaders(notes, rightSide, avoidLines)
local linePositionsCurPage
if avoidLines then
- linePositionsCurPage = linePositions[currentPage] or {}
+ linePositionsCurPage = {}
+ -- use the current pageheight to convert coordinates:
+ -- savepos yields coordinates relativ to lower left corner of page,
+ -- while our tikzpicture is anchored at the upper left corner
+ for k, v in pairs(linePositions[currentPage] or {}) do
+ local baseline = v[1] - tex.pageheight
+ linePositionsCurPage[k] = {baseline, baseline + v[2], baseline - v[3]}
+ if todonotesDebug then
+ print("linePositionsAddLine, add: " .. v[1] .. ", pageheight: " .. tex.pageheight ..
+ ", result: " .. baseline)
+ end
+ end
end
-- number of slots on the whole page
@@ -1759,11 +1781,16 @@ local function posPoLeaders(notes, rightSide, avoidLines)
-- sort notes by inputY
table.sort(notes, compareNoteIndInputYDesc)
- -- draw slots
+ -- draw slots and line positions
if todonotesDebug then
for i = 1,totalNumSlots+1 do
local pos = area.top - (i-1) * rasterHeight
- tex.print("\\draw[blue,dashed] (0," .. pos .. "sp) -- +(21cm,0);")
+ tex.print("\\draw[blue,dashed] (0," .. pos .. "sp) -- +(21cm,0);")
+ end
+ for ind, v in pairs(linePositionsCurPage) do
+ local pos = v[1]
+ tex.print("\\draw[red,dashed] (0," .. pos .. "sp) -- +(21cm,0);")
+ tex.print("\\node[red] at (1cm," .. pos .. "sp) {" .. ind .. "};")
end
end
@@ -1870,7 +1897,7 @@ local function posPoLeaders(notes, rightSide, avoidLines)
if avoidLines then
leaderArmR = labelTopR - noteInnerSep - r:getHeight() / 2 -- east anchor
- -- find first line (from the top) which lower bound is below leaderArmR
+ -- find first line (from the top) whose lower bound is below leaderArmR
local lineBelowInd
for ind, v in pairs(linePositionsCurPage) do
if v[3] <= leaderArmR then
diff --git a/macros/luatex/latex/luatodonotes/luatodonotes.pdf b/macros/luatex/latex/luatodonotes/luatodonotes.pdf
index 3235a373c2..81bc887aa6 100644
--- a/macros/luatex/latex/luatodonotes/luatodonotes.pdf
+++ b/macros/luatex/latex/luatodonotes/luatodonotes.pdf
Binary files differ