\ac in corpo minore ma solo fuori da MakeText[Low|Upp]erCase

  • Creatore
    Topic
  • #67942
    Up
    0
    Down
    ::


    Voglio definire un comando \ac (senza caricare il pacchetto acronym) che in generale equivalga a \textsmaller, ma che si annulli all’interno di titoli o altra roba che viene forzata a essere in maiuscolo o minuscolo mediante \MakeTextUpperCase o \MakeTextLowerCase. Ho pensato di fare il controllo su \NoCaseChange:
    `\documentclass{report}

    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage[italian]{babel}
    \usepackage{textcase,relsize,titlesec}

    \makeatletter
    \titleformat{\chapter}[hang]
    {\normalfont\Large\sffamily}
    {\normalfont\Large\scshape\sffamily\thechapter}
    {\marginparsep}{\scshape\MakeTextUppercase}
    \titleformat{\section}[hang]
    {\normalfont\Large\sffamily}
    {\normalfont\Large\scshape\sffamily\thesection}
    {\marginparsep}{\scshape\MakeTextLowercase}
    \let\old@l@chapter\l@chapter
    \renewcommand\l@chapter[2]{\old@l@chapter{\scshape\MakeTextUppercase{#1}}{#2}}
    \let\old@l@section\l@section
    \renewcommand\l@section[2]{\old@l@section{\scshape\MakeTextLowercase{#1}}{#2}}

    \newcommand\ac{%
    \ifx\NoCaseChange\@firstofone
    \expandafter\textsmaller
    \else
    \expandafter\@firstofone
    \fi}
    \makeatother

    \begin{document}
    \tableofcontents
    \chapter{Logica \ac{BAN}}
    Questo capitolo presenta la logica \ac{BAN}…
    \section{Particolarità \ac{BAN}}
    Questo paragrafo…
    \end{document}`

    Ora, se uso \newcommand, allora il comando \ac viene espanso nei file ausiliari e questo non va bene perché così \NoCaseChange risulta sempre \@firstofone. Il risultato è che gli acronimi compaiono in corpo minore nel testo normale (giusto) e nell’indice (sbagliato) ma non nei titoli (giusto).

    Se uso \DeclareRobustCommand, allora \ac non viene espanso nei file ausiliari, però così esce fuori in corpo minore sia nell’indice che nei titoli. Perché succede questo? Come risolvere?

    Grazie,
    Antonio

Visualizzazione 12 filoni di risposte
  • Autore
    Risposte
    • #67943
      Up
      0
      Down
      ::


      \ifx\protect\typeset@protect

      Ciao
      Enrico

    • #67944
      Up
      0
      Down
      ::

      egreg9″ post=66986\ifx\protect\typeset@protect

      Ciao
      Enrico

      Ciao Enrico, grazie.
      Non ho capito, a me quel test risulta sempre falso. 😕
      Come devo scrivere?

    • #67945
      Up
      0
      Down
      ::

      antonio.macrì” post=67002

      \ifx\protect\typeset@protect

      Ciao
      Enrico

      Ciao Enrico, grazie.
      Non ho capito, a me quel test risulta sempre falso. 😕
      Come devo scrivere?

      Uhm. Non va, in effetti. Temo che non ci sia molto da fare, al riguardo. Come saprai, i titoli delle sezioni sono usati anche per le testatine e l’indice, quindi è piuttosto difficile distinguere i significati di \ac. Piuttosto, lo neutralizzerei durante la composizione dell’indice e delle testatine.

      Ciao
      Enrico

    • #67946
      Up
      0
      Down
      ::

      egreg9″ post=67022

      [quote=”egreg9″ post=66986]\ifx\protect\typeset@protect

      Ciao
      Enrico

      Ciao Enrico, grazie.
      Non ho capito, a me quel test risulta sempre falso. 😕
      Come devo scrivere?

      Uhm. Non va, in effetti. Temo che non ci sia molto da fare, al riguardo. Come saprai, i titoli delle sezioni sono usati anche per le testatine e l’indice, quindi è piuttosto difficile distinguere i significati di \ac. Piuttosto, lo neutralizzerei durante la composizione dell’indice e delle testatine.

      Ciao
      Enrico[/quote]
      Aspetta un attimo, stavo leggendo i tuoi Appunti: 🙂 hai dimenticato un ‘@’?

      Così sembra andare:
      `\documentclass{report}

      \usepackage[T1]{fontenc}
      \usepackage[utf8]{inputenc}
      \usepackage[italian]{babel}
      \usepackage{textcase,relsize,titlesec}

      \makeatletter
      \titleformat{\chapter}[hang]
      {\normalfont\Large\sffamily}
      {\normalfont\Large\scshape\sffamily\thechapter}
      {\marginparsep}{\scshape\MakeTextUppercase}
      \titleformat{\section}[hang]
      {\normalfont\Large\sffamily}
      {\normalfont\Large\scshape\sffamily\thesection}
      {\marginparsep}{\scshape\MakeTextLowercase}
      \let\old@l@chapter\l@chapter
      \renewcommand\l@chapter[2]{\old@l@chapter{\scshape\MakeTextUppercase{#1}}{#2}}
      \let\old@l@section\l@section
      \renewcommand\l@section[2]{\old@l@section{\scshape\MakeTextLowercase{#1}}{#2}}

      \newcommand\ac{%
      \ifx\protect\@typeset@protect
      \ifx\NoCaseChange\@firstofone
      \expandafter\textsmaller
      \else
      \expandafter\@firstofone
      \fi
      \else
      \expandafter\@firstofone
      \fi}
      \makeatother

      \begin{document}
      \tableofcontents
      \chapter{Logica \ac{BAN}}
      Questo capitolo presenta la logica \ac{BAN}…
      \section{Particolarità \ac{BAN}}
      Questo paragrafo…
      \end{document}`

      In un modo o nell’altro sei sempre tu a dare soluzioni 🙂 Grazie!

      Ciao,
      Antonio

    • #67947
      Up
      0
      Down
      ::


      No, in quel modo forzo ogni scrittura nei file ausiliari a venire espansa subito con un \@firstofone. La cosa non va bene nel caso di didascalie di figure o altro testo che non deve essere in maiuscolo o maiuscoletto.

      egreg9″ post=67022Uhm. Non va, in effetti. Temo che non ci sia molto da fare, al riguardo. Come saprai, i titoli delle sezioni sono usati anche per le testatine e l’indice, quindi è piuttosto difficile distinguere i significati di \ac. Piuttosto, lo neutralizzerei durante la composizione dell’indice e delle testatine.

      Ciao
      Enrico

      Per “neutralizzarlo” intendi metterci un \protect davanti? A mano?

      Grazie,
      Antonio

    • #67948
      Up
      0
      Down
      ::


      No, usare \def\ac#1{#1} quando componi l’indice e le testatine.

      Ciao
      Enrico

    • #67949
      Up
      0
      Down
      ::

      egreg9″ post=67030No, usare \def\ac#1{#1} quando componi l’indice e le testatine.

      Ciao
      Enrico

      Il problema è che devo essere più selettivo e fare \textsmaller solo delle voci che effettivamente non sono in maiuscolo o maiuscoletto.

      Ho pensato di fare così:
      `\documentclass{scrreprt}

      \usepackage[T1]{fontenc}
      \usepackage[utf8]{inputenc}
      \usepackage[italian]{babel}
      \usepackage[pdfspacing]{classicthesis}
      \usepackage{relsize}

      \makeatletter
      \pdfstringdefDisableCommands{%
      \let\textsmaller\@firstofone}
      \DeclareRobustCommand\ac{\textsmaller}
      \let\old@mtuc\MakeTextUppercase
      \renewcommand\MakeTextUppercase[1]{%
      \begingroup\def\ac##1{##1}\old@mtuc{#1}\endgroup}
      \let\old@mtlc\MakeTextLowercase
      \renewcommand\MakeTextLowercase[1]{%
      \begingroup\def\ac##1{##1}\old@mtlc{#1}\endgroup}
      \makeatother

      \begin{document}
      \tableofcontents
      \listoffigures
      \chapter{Logica \ac{BAN}}
      Questo capitolo presenta la logica \ac{BAN}…
      \section{Particolarità \ac{BAN}}
      Questo paragrafo…
      \begin{figure}
      \centering\Large\ttfamily FIGURA
      \caption{Schema \ac{BAN}.}
      \end{figure}
      \end{document}`
      Sembra funzionare tutto a modo. (Uso classicthesis per fare prima il maiuscoletto.)

      Grazie ancora, Enrico.

      Ciao,
      Antonio

    • #67950
      Up
      0
      Down
      ::


      E invece no, ancora una volta! 😡
      In un sorgente più complesso dà problemi. Vabbè per ora basta! Domani riprendo…

      Buona notte!

    • #67951
      Up
      0
      Down
      ::


      Finalmente sembra che abbia trovato una soluzione! 😉

      `\documentclass{scrreprt}

      \usepackage[T1]{fontenc}
      \usepackage[utf8]{inputenc}
      \usepackage[italian]{babel}
      \usepackage[pdfspacing]{classicthesis}
      \usepackage{relsize,etoolbox}

      \makeatletter
      \pdfstringdefDisableCommands{%
      \let\textsmaller\@firstofone}
      \DeclareRobustCommand\ac{\textsmaller}
      \patchcmd\@uclcnotmath{#1}{#1\def\ac##1{##1}}{}{%
      \errmessage{Cannot patch \string\@uclcnotmath}}
      \makeatother

      \begin{document}
      \tableofcontents
      \listoffigures
      \chapter{Logica \ac{BAN}}
      Questo capitolo presenta la logica \ac{BAN}…
      \section{Particolarità \ac{BAN}}
      Questo paragrafo…
      \begin{figure}
      \centering\Large\ttfamily FIGURA
      \caption{Schema \ac{BAN}.}
      \end{figure}
      \end{document}`

      Ciao,
      Antonio

    • #67952
      Up
      0
      Down
      ::


      Anzi, così non scomodo nemmeno etoolbox: 🙂
      `\makeatletter
      \pdfstringdefDisableCommands{%
      \let\textsmaller\@firstofone}
      \DeclareRobustCommand\ac{\textsmaller}
      \newcommand\old@uclcnotmath{}
      \let\old@uclcnotmath\@uclcnotmath
      \def\@uclcnotmath#1{\old@uclcnotmath{#1\def\ac##1{##1}}}
      \makeatother`

      Ciao,
      Antonio

    • #67953
      Up
      0
      Down
      ::


      È un hack, naturalmente; segnalo per bene come tale nel documento e non diffonderlo senza avvisare. 🙂

      Ciao
      Enrico

    • #67954
      Up
      0
      Down
      ::

      egreg9″ post=67051È un hack, naturalmente; segnalo per bene come tale nel documento e non diffonderlo senza avvisare. 🙂

      Ciao
      Enrico

      Ho fatto qualcosa di male? Perché non dovrei diffonderlo senza avvisare?
      Finirà in un documento che dovrà essere usato da una ristretta cerchia di persone.

      A me sembra un metodo abbastanza pulito. Il primo argomento di \@uclcnotmath prende proprio alcune definizioni che vengono eseguite dentro un gruppo.

      Leggo sempre con molta attenzione quello che scrivi. Tu la ritieni una soluzione di compromesso o troppo sporca?

      Grazie

    • #67955
      Up
      0
      Down
      ::

      antonio.macrì” post=67057

      È un hack, naturalmente; segnalo per bene come tale nel documento e non diffonderlo senza avvisare. 🙂

      Ciao
      Enrico

      Ho fatto qualcosa di male? Perché non dovrei diffonderlo senza avvisare?
      Finirà in un documento che dovrà essere usato da una ristretta cerchia di persone.

      A me sembra un metodo abbastanza pulito. Il primo argomento di \@uclcnotmath prende proprio alcune definizioni che vengono eseguite dentro un gruppo.

      Leggo sempre con molta attenzione quello che scrivi. Tu la ritieni una soluzione di compromesso o troppo sporca?

      Grazie

      È una soluzione di compromesso per questo specifico problema. Buona, ma solo per la natura di ciò che desideri fare in questo caso.

      Ciao
      Enrico

Visualizzazione 12 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top