- Questo topic ha 11 risposte, 5 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 5 mesi fa da
robitex.
-
CreatoreTopic
-
26 Marzo 2014 alle 11:37 #93592::
Ciao a tutti.
Desidererei inserire al di sotto di un testo che rappresenta un titolo una linea della stessa larghezza del testo.
Una specie di sottolineatura.
Il comando, per esempio \mytitle, potrebbe accettare come argomento il testo da sottolineare regolando la distanza tra il testo e la linea, e lo spessore della linea.Che codice proporreste?
Grazie.
R.
-
CreatoreTopic
-
AutoreRisposte
-
-
26 Marzo 2014 alle 12:00 #93593
-
26 Marzo 2014 alle 12:44 #93594::
`\documentclass[]{article}
\usepackage{xcoffins}
\usepackage{lipsum}\ExplSyntaxOn
\NewCoffin\Roby_Text_Coffin
\NewCoffin\Roby_Line_Coffin
\tl_new:N \l_roby_text_tl\NewDocumentCommand {\RobyUnderline}{O{0em}O{0.4pt}m}{
\tl_set:Nn \l_roby_text_tl {#3}
\SetHorizontalCoffin\Roby_Text_Coffin{
\l_roby_text_tl
}
\SetHorizontalCoffin\Roby_Line_Coffin{
\rule{\CoffinWidth\Roby_Text_Coffin}{#2}
}
\JoinCoffins\Roby_Line_Coffin[l,t]\Roby_Text_Coffin[l,b] (0pt,#1)
\TypesetCoffin\Roby_Line_Coffin\par
}
\ExplSyntaxOff
\begin{document}
\RobyUnderline[2pt][6pt]{\Huge ciao}
\lipsum\end{document}`
Non credo mi complicherei così la vita, ma è tanto per ricordare che esistono i coffins! 🙂
Il primo argomento opzionale regola la distanza verticale fra testo e linea, il secondo regola lo spessore della linea.Fran
EDIT: se volessi che la distanza fra linea e testo fosse sempre misurata a partire dalla linea di base, bisognerebbe fare un calcolo usando \CoffinDepth:` \JoinCoffins\Roby_Line_Coffin[l,t]\Roby_Text_Coffin[l,b] (0pt,-\CoffinDepth\Roby_Text_Coffin + #1)`
-
26 Marzo 2014 alle 13:03 #93595::
[tt]tikzmark[/tt]: `
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shadings,tikzmark}\newcommand{\tikzunderline}[3][]{%
\tikz[remember picture, overlay]{\draw[#1](pic cs:#2)–(pic cs:#3);}
}\begin{document}
\tikzmark{a}\Huge testo\tikzmark{b}\tikzunderline{a}{b}
\tikzmark{c}\Huge testo\tikzmark{d}\tikzunderline[yshift=-3pt]{c}{d}
\tikzmark{e}\Huge testo\tikzmark{f}\tikzunderline[yshift=-1pt, shorten <=5pt,shorten >=5pt]{e}{f}
\tikzmark{g}\Huge testo\tikzmark{h}\tikzunderline[yshift=-4pt, shorten <=-5pt,shorten >=-5pt, ultra thick]{g}{h}
\end{document}
` Ciao
Claudio
-
26 Marzo 2014 alle 19:40 #93596::
@samiel
mi interessava un comando …
@claudio
ottimo ma sono un po’ contrario all’uso dell’overlay perché richiede due compilazioni …
@franen
naturalmente le soluzioni più complicate mi piacciono 😀
Ho notato che non servirebbe definire un registro token dove memorizzare il testo, esiste un buon motivo per farlo?
Dove hai imparato questa libreria L3?
Qual è il pricipio di funzinamento?
Perché non scrivi un articolo per ArsTeXnica sull’argomento?
Grazie a tutti.
R.
-
26 Marzo 2014 alle 21:16 #93597::
robitex” post=93212 @franen
Ho notato che non servirebbe definire un registro token dove memorizzare il testo, esiste un buon motivo per farlo?
Dove hai imparato questa libreria L3?
Qual è il pricipio di funzinamento?
Perché non scrivi un articolo per ArsTeXnica sull’argomento?
Grazie a tutti.
R.No, non c’è un buon motivo, è che ho riadattato questo comando da uno che avevo scritto tempo addietro e lì serviva creare la tl.
Ho usato questa libreria una sola volta in vita mia in uno degli esempi di uso del mio pacchetto per libretti di matrimonio.
Da quel che ho capito è utile per creare tante scatoline in cui metti quel che vuoi e che poi allinei e accoppi a tuo piacimento.
Per l’articolo intanto passo… (svelando un segreto ti dico che ne ho iniziato uno su xindy da quasi un anno ma non riesco a trovare la voglia di andare avanti 🙁 )Fran
-
26 Marzo 2014 alle 21:44 #93598
-
27 Marzo 2014 alle 5:56 #93599
-
27 Marzo 2014 alle 6:29 #93600::
cfiandra” post=93222
@claudio
ottimo ma sono un po’ contrario all’uso dell’overlay perché richiede due compilazioni …Hai perfettamente ragione, quello è il problema principale. Ma, usando arara o altri tool, basta definire un passaggio in più ed è fatta.
Ciao
ClaudioPurtroppo arara dipende da Java che va benissimo per certi compiti ma credo meno per altri come questo, e poi sono molto pigro.
Perché non utilizzare texlua che viene installato di default per compiere queste elaborazioni?
R.
-
27 Marzo 2014 alle 8:12 #93601::
Senza andare a cercare chissà che cosa, linguaggi strani o poco conosciuti, che ne diresti di questo singolo comando per \mytitle?`% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = pdflatex\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}\newbox\mytitlebox
\newcommand{\mytitle}[3]{%
% argomenti: #1 titolo
% #2 distanza sottolineatura
% # spessore sottolineatura
\begin{lrbox}{\mytitlebox}#1\end{lrbox}%
\leavevmode\vtop{\copy\mytitlebox\vskip \dimexpr#2-\dp\mytitlebox\relax\hrule height #3}
}\begin{document}
\centering\mytitle{\Huge Questo è il mio titolo}{2ex}{1mm}
\end{document}`
Nota che la sottolineatura è ad distanza specificata dalla baseline. Magari ci vorrebbe qualche cosina di meglio per parametrizzare la distanza versicale al corpo del testo del titolo, ma questo funziona con comandi parzialmente LaTeX (per esempio ambiente lrbox, e per il resto comandi nativi di TeX.
-
27 Marzo 2014 alle 8:22 #93602
-
28 Marzo 2014 alle 11:13 #93603::
Ho giocato un po’ con il pacchetto xcoffins.
Aggiungo che i comandi possono essere usati direttamente nel documento senza bisogno dell’ambiente di programmazione L3.
Ecco un esempio sempre per sottolineare un titolo:
`\documentclass{article}
\usepackage{xcoffins}
\begin{document}\NewCoffin\titletext
\NewCoffin\titleline\SetHorizontalCoffin\titletext{\Large Titolo unico}
\SetHorizontalCoffin\titleline{%
\rule{\CoffinWidth\titletext}{0.2pt}%
}
\JoinCoffins
\titletext\titleline\TypesetCoffin\titletext
\end{document}`
Diversamente da franen, il join prevede che ia il titolo ad essere il padre e la linea il figlio ($ texdoc xcoffins per leggere la documentazione L3).Per fare in modo che la linea tocchi sempre la base dei caratteri, basta aggiungere tra parentesi tonde al join una distanza:
`\documentclass{article}
\usepackage{xcoffins}
\begin{document}\NewCoffin\titletext
\NewCoffin\titleline\SetHorizontalCoffin\titletext{\Large Titolo game con discendenti}
\SetHorizontalCoffin\titleline{%
\rule{\CoffinWidth\titletext}{0.2pt}%
}
\JoinCoffins
\titletext\titleline
(0pt, -\CoffinDepth\titletext)
\TypesetCoffin\titletext\end{document}`
Con gli argomenti opzionali tra parentesi quadre del join invece, regoliamo i punti di unione.
Per esempio per sovrapporre una linea nel centro del testo usiamo specificare le chiavi che corrispondono agli allineamenti:
`\documentclass{article}
\usepackage{xcoffins}
\begin{document}\NewCoffin\titletext
\NewCoffin\titleline\SetHorizontalCoffin\titletext{\Large Titolo game con discendenti}
\SetHorizontalCoffin\titleline{%
\rule{\CoffinWidth\titletext}{0.2pt}%
}
\JoinCoffins
\titletext[vc,hc]\titleline[vc,hc]% una prima composizione
\TypesetCoffin\titletext\end{document}`
Possiamo anche fare il join più di una volta. Per comporre il titolo con due linee, una alla base ed una in sommità, basta scrivere:
`\JoinCoffins
\titletext[hc,H]\titleline[hc,vc]
\JoinCoffins
\titletext[hc,t]\titleline[hc,vc]`Cosa succede se ridefiniamo il coffin? Semplice, la ridefinizione è totale perciò si perde il join con la linea.
`\documentclass{article}
\usepackage{xcoffins}
\begin{document}\NewCoffin\titletext
\NewCoffin\titleline\SetHorizontalCoffin\titletext{\Large Titolo game con discendenti}
\SetHorizontalCoffin\titleline{%
\rule{\CoffinWidth\titletext}{0.2pt}%
}
\JoinCoffins
\titletext\titleline
(0pt, -\CoffinDepth\titletext)% una prima composizione
\TypesetCoffin\titletext% una seconda ma non cambia niente
\TypesetCoffin\titletext% ridefiniamo il primo coffin
\SetHorizontalCoffin\titletext{\Large Game is over}% ricomponiamo
\TypesetCoffin\titletext\end{document}`
Interessante per risolvere semplicemente alcuni problemi…
e come sempre L3 si dimostra assai potente…
Alla prossima.
R.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.