- Questo topic ha 8 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 7 anni, 3 mesi fa da
samiel.
-
CreatoreTopic
-
27 Maggio 2019 alle 17:55 #115842
-
CreatoreTopic
-
AutoreRisposte
-
-
28 Maggio 2019 alle 4:52 #115843
-
28 Maggio 2019 alle 10:17 #115844::
Il codice che trovo è il seguente (analogo per subscript)
`\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
\DeclareRobustCommand*\textsuperscript[1]{%
\@textsuperscript{\selectfont#1}}
\def\@textsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
\DeclareRobustCommand*\textsubscript[1]{%
\@textsubscript{\selectfont#1}}%
\def\@textsubscript#1{%
{\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
\newdimen\footnotesep`
Ora, io riesco a capire (se non faccio errori) che:
– si va cmq in modalità matematica anche se si opera nel testo
– che le lettere sono inserite in scatole
– che il font è già scelto da \selectfont
– che la dimensione è determinata da \sf@size
Quello che non capisco, e che più mi servirebbe sul piano pratico, è:
– come in effetti viene calcolata la dimensione?
Voglio dire: se io volessi apici più piccoli?
– come si calcola l’offset, ossia l’altezza dell’apice?
Voglio dire: se io volessi apici più alti o bassi?
-
28 Maggio 2019 alle 16:04 #115845::
Puoi ridefinire \textsuperscript e \texsubscript in modo che
1) contngano un test per sapere se ti trovi in ambiente matematico o testuale. Nel primo caso devi seguire le modalità matematiche che sono quelle indicate dall’argomento di \ensuremath. Nel seocndo caso ti affici a \raisebox{…}[…][…]{…} dive il rpimo argomento indica un sollevamento (che conviene proporzionare al font in uso, e quindi all’unità di misura ex) con un valore positivo per gli apici e un valore negativo per i pedici; i due argomenti opzionali servono per specificare una altezza e una profondità di quanto sollevi o abbassi; il quarto argomento obbligatorio è la specificazione del font e ciò che vuoi sollevare o abbassare.Nel caos specifico delle informazioni che hai correttamente specificato nel tuo codice preso da latex.ltx, il fatto di invocare la matematica vuoi dire avere le dimensioni dei quattro corpi per la matematica nel testo e in dispaly, il copro dei pedici e apici di primo livello, e il corpo dei pedici e apici di secondo livello. Quindi la macro \sf@size contiene il corpo degli apici e pedici di primo livello (confronta nella guida fntguide col solito texdoc fntguide; ma il secondo argomento è indicato con il valore \z@ (zero); quindi in quegli apici e pedici il font che viene usato viene selezionato (con \selectfont) del corpo corrispondente a quello della matematica, ma usato dentro una scatola di testo, e con scartamento nullo.
Se volessi usare \raisebox (o i comandi primitivi \raise o \lower) potresti usare la stessa tecnica, ma dovresti prima \dare il comando \m@th che imposta i font matematici relativi al font corrente.
Le macro di LaTeX fanno riferimento ai corpi matematici perché sono definiti anche quando si usano i font Computer moder o i CM-Super, i cui file di definizione fanno riferimento ad un numero discreto di corpi; 5pt, 6pt,…,10pt, 11pt (in reatà 10pt scalato con il fattore 1.095), buona approssimazione della radice quarta di 2), 12pt, … , 24.xxpt (non ricordo i decmiali). Se invece usi font continuamente scalabili o anche i Latin Modern continuamente scalabili a tratti, puoi scegliere il corpo che ti pare; per esempio con un copro normale di 10pt, i pedici e apici di primo livello hanno il copro di 7pt; con i Computer Modern se tu specificassi un corpo di 7.5pt, l’algoritmo di scelta ti userebbe il font di corpo 7 o di corpo 8 punti, mentre con i Latin Modern ti userebbe proprio i font di corpo di 7.5pt come richiesto.
Come vedi giocare con i corpi è una cosa complicata; mi domando quando verranno modificati i file .fd (font description) dei Computer Modern nella stessa maniera in cui sono definiti quelli dei Latin Modern. In realtà la risposta la conosco: mai. Proprio perché anche se da lustri sono disponibili in formato vettoriale il formato di default del sistema TeX è il DVI, e per quello , se uno non ne disponesse, basta crearli con METAFONT, che notoriamente produce dei font bitmapped che, appunto non sono vettoriali e quindi non sono scalabili con continuità, nemmeno con la scalabilità continua a tratti come i Latin Modern.
-
29 Maggio 2019 alle 11:54 #115846::
in effetti la cosa non appare lineare
e temo richieda capacità che non ho per mettere le mani sul codice.
Ma, in pratica, per ridurre gli apici, indicativamente,
per capire se cimentarmi o rinunciare,
serve un codice luuungo e complesso,
o magari le 2 righe 2 giuste bastano?
il fatto di usare lualatex è del tutto inifluente?
-
29 Maggio 2019 alle 12:02 #115847
-
29 Maggio 2019 alle 18:18 #115848
-
3 Giugno 2019 alle 7:05 #115849::
Allora, eccoti al mia soluzione che vedi nel seguente EMC insieme a
1) quello che si ottiene con \textsuperscript e \textsubscript
2) quello che si ottiene simulando il caso precedente con l’uso dei comandi \apice e \pedice che ricorrono ai comandi \LaTeX \raisebox e \scriptsize
3) quello che si ottiene con i comandi definiti per te \ap e \ped (che puoi rinominare a tuo piacimento); Nell’esempio minimo si vedono chiaramante le differenze. Ma vedi sotto.`% !TEX TS-program = pdflatex
% !TEX encoding = UTF-8 Unicode\documentclass[12pt,a4paper]{article}
\usepackage{lmodern}\usepackage{xparse,xfp}
\newcommand\apice[1]{\raisebox{0.8ex}[0pt][0pt]{\scriptsize#1}}
\newcommand\pedice[1]{\raisebox{-0.4ex}[0pt][0pt]{\scriptsize#1}}\makeatletter
\NewDocumentCommand\ap{O{0.8} m O{1}}{%
\edef\TempA{\fpeval{round(#3 * 0.7 * \f@size,2)}}%
\raisebox{#1ex}[\z@][\z@]{\fontsize{\TempA}{\z@}\selectfont#2}}\NewDocumentCommand\ped{O{0.4} m O{1}}{%
\edef\TempA{\fpeval{round(#3 * 0.7 * \f@size,2)}}%
\raisebox{-#1ex}[\z@][\z@]{\fontsize{\TempA}{\z@}\selectfont#2}}
\makeatother\begin{document}
Pippo\textsuperscript{g} Pippo\apice{g} Pippo\ap{g} Pippo\ap[0.5]{g} Pippo\ap{g}[0.75]Pluto\textsuperscript{b} Pluto\apice{b}Pluto\ap{b} Pluto\ap[0.5]{b} Pluto\ap{b}[0.75]
Pinco\textsuperscript{3} Pinco\apice{3} Pinco\ap{3} Pinco\ap[0.5]{3} Pinco\ap{3}[0.75]
Pippo\textsubscript{g} Pippo\pedice{g} Pippo\ped{g} Pippo\ped[0.7]{g} Pippo\ped{g}[0.75]
Pluto\textsubscript{b} Pluto\pedice{b} Pluto\ped{b} Pluto\ped[0.7]{b} Pluto\ped{b}[0.75]
Pinco\textsubscript{3} Pinco\pedice{3} Pluto\ped{3} Pluto\ped[0.7]{3} Pippo\ped{3}[0.75]
\end{document}`Prima di tutto la sintassi:
1) entrambi i comandi richiedono due argomenti opzionali racchiusi fra quadre e un argomento obbligatorio racchiuso come sempre fra graffe;
1.a) il primo argomento è facoltativo e descrive l’innalzamento o l’abbassamento assoluti dell’indice mediante il solo coefficiente moltiplicativo dell’unità di misura ex; il valore di default di questo coefficiente per l’innalzamento è 0.8, lo stesso valore usato nella simulazione con il comando \apice; per l’abbassamento il valore di default è 0.4; quindi se non esprimi nessun argomento facoltativo; \ap si ocmporta come \apice e come \textsuperscript; mentre \pad si comporta come pedice e \textsubscript.
1.b) il secondo argomento è obbligatorio e contiene ciò che va messo ad apice o a pedice;
1.c) il terzo argomento è facoltativo e rappresenta la frazione del copro di default dell’indice; di default questo corpo è pari a \scriptsize; Se il terzo argomento vale, come negli esempi, 0.5, il corpo usato è la metà di quello normalmente usato per gli indici. (vedi la nota 2).
2) Il fatto che si possa moltiplicare un valore di corpo per un fattore qualsiasi implica che questi comandi \ap e \ped funzionano correttamente solo con font scalabili con continuità almeno a tratti; è per questo che ho impostato i Latin Modern che sono scalabili con continuità a tratti. Non sono scalabili nemmeno a tratti i Computer Modern e i CM-Super. Si potrebbe usare, al posto del ricalcolo del corpo mediante la funzione \fpeval del linguaggio L3, il comando \resizebox con un adeguato fattore di scala. Ci sarebbe comunque il vincolo di usare font vettoriali, quindi in realtà non cambierebbe nulla nei vincoli di usabilità.
3) l’argomento di \raisebox non ha né altezza né profondità, quindi se abbassi troppo o alzi troppo l’indice potrebbe interferire con gli elementi della riga successiva o precedente. Questo è il prezzo che io sono disposto a pagare per evitare il modo matematico.
4) non è esplicito dalla frase precedente, ma i comandi così definiti funzionano solo in modo testo; i comandi originali di LaTeX, benché contengano il prefisso “\text” funzionano passando in modo matematico; questo è il motivo per il quale vuoi rimpicciolire certi apici numerici; Va da sé che se vuoi usarein modo matematico il comandi che ti ho definito, devi pensarci tu esplicitamente e metterli in una scatola \mbox.
7) nessuno ti vieta, ovviamente, di usare sia i comandi \textsuperscript e \textsubscipt in alternativa ai comandi che ti ho definito e a seconda dei casi di come li vuoi usare; né di ridefinire il tutto con cose del tipo [tt]\newcommand\Apice[…]{\ifmmode{comandi da usare in modo matematico}{comandi da usare in modo testo}}[/tt]; sta a te farne l’uso che ritieni più opportuno e più comodo per cio che devi comporre.
-
4 Giugno 2019 alle 12:30 #115850
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.