%\iffalse %<*package> %% \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 %% Lower-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 %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} % %\fi %\iffalse % Doc-Source file to use with LaTeX2e % Copyright (C) 2018 Sebastian Friedl % % This work is subject to the LaTeX Project Public License, Version 1.3c or -- at % your option -- any later version of this license. % The work consists of the files lualatex-truncate.dtx, lualatex-truncate.ins, % lualatex-truncate-doc.dtx and the derived file lualatex-truncate.sty % % This work has the LPPL maintenance status 'maintained'. % Current maintainer of the work is Sebastian Friedl. %\fi % % % % \changes{1.0}{2018/06/03}{Initial release} % \changes{1.1}{2018/08/22}{\textsc{\bfseries Bugfix:} visible hyphen char with \texttt{breakall} option and non-english language} % % \subsubsection*{Initialization} % Identify the package and require \LaTeXe: % \begin{macrocode} \ProvidesPackage{lualatex-truncate}% [2018/08/22 v1.1 LuaLaTeX wrapper for the truncate package] \NeedsTeXFormat{LaTeX2e} % \end{macrocode} % % % % \subsubsection*{Internal variables} % This variable is used to remember whether messing with the hyphen char is required: % \begin{macrocode} \newif\if@lualtxtruncate@hackhyphen \@lualtxtruncate@hackhyphenfalse % \end{macrocode} % % Also, enable remembering whether the \opt{breakall} option has been used: % \begin{macrocode} \newif\if@lualtxtruncate@breakall \@lualtxtruncate@breakallfalse % \end{macrocode} % % % % % \subsubsection*{Package options} % The \opt{breakwords} and \opt{breakall} options require the hyphanation character to be hidden. % Therefore, we remember to \enquote{hack} the hyphen character before passing these options % to the \enquote{original} \sty{truncate} package: % \begin{macrocode} \DeclareOption{breakwords}{% \@lualtxtruncate@hackhyphentrue% \PassOptionsToPackage{breakwords}{truncate}} % \end{macrocode} % % In case of the \opt{breakall} option, we also need to remember the option's usage: % \begin{macrocode} \DeclareOption{breakall}{% \@lualtxtruncate@breakalltrue% \@lualtxtruncate@hackhyphentrue% \PassOptionsToPackage{breakall}{truncate}} % \end{macrocode} % % \smallskip % Pass all other options (i.e. \opt{hyphenate} and \opt{fit}) directly to the \sty{truncate} package: % \begin{macrocode} \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{truncate}} % \end{macrocode} % % \smallskip % Process all options passed to \sty{lualatex-truncate}: % \begin{macrocode} \ProcessOptions % \end{macrocode} % % % % \subsubsection*{Load the \sty{truncate} package} % Require the \sty{truncate} package. All package options have already been passed on. \\ % If \sty{truncate} has been loaded already, a error message is printed to the log. % \begin{macrocode} \@ifpackageloaded{truncate}{% \PackageError{lualatex-truncate}% {Don't load the truncate package when using lualatex-truncate!}% {Don't load the truncate package and pass all package options to lualatex-truncate! Otherwise, the wrapper mechanism won't be able to understand what you want.}% }{\RequirePackage{truncate}} % \end{macrocode} % % % % \subsubsection*{If the document is not compiled via \hologo{LuaLaTeX}\dots} % Don't wrap anything if the document isn't compiled by \hologo{LuaLaTeX}: % \begin{macrocode} \RequirePackage{iftex} \ifLuaTeX\else% \PackageWarningNoLine{lualatex-truncate}% {Whoops! You don't want to use LuaLaTeX?}% \endinput% \fi% % \end{macrocode} % % % % \subsubsection*{Constructing the wrapper} % \begin{macro}{\lualtxtruncate@truncate} % Remember the original "\truncate" command's definition. % Since "\truncate" provides an optional argument, "\LetLtxMacro" has to be used % instead of the primitive "\let" command: % \begin{macrocode} \RequirePackage{letltxmacro} \LetLtxMacro\lualtxtruncate@truncate\truncate % \end{macrocode} % \end{macro} % % \begin{macro}{\truncate} % \changes{1.1}{2018/08/22}{Remember previous hyphenation character} % Construct the wrapper by redefining the "\truncate" command % and -- if necessary -- modifying "\prehyphenchar". \\ % "\prehyphenchar"'s value is stored inside the counter % "\lualtxtruncate@tmp". Also, the current language must be set to US english, % if the \opt{breakall} option has been used. % \begin{macrocode} \renewcommand{\truncate}[3][\TruncateMarker]{{% two braces -> scope changes \if@lualtxtruncate@breakall% \language\z@% force US english \fi% \newcount\lualtxtruncate@tmp% \lualtxtruncate@tmp=\the\prehyphenchar% remember current hyphen char \if@lualtxtruncate@hackhyphen% \prehyphenchar=0% invisible hyphen \fi% \lualtxtruncate@truncate[#1]{#2}{#3}% run the original \truncate macro \if@lualtxtruncate@hackhyphen% \prehyphenchar=\the\lualtxtruncate@tmp% restore hyphen \fi% }} % \end{macrocode} % \end{macro} % % % % \subsubsection*{Famous last words} % Enough code for this package. "\endinput". % \begin{macrocode} \endinput % \end{macrocode}