Skip to content

Come sostituire la foto in moderncv classic con un codice QR?

Ti suggeriamo di rivedere questa risposta in un ambiente controllato prima di passarla alla produzione, saluti.

Soluzione:

photo vuole un file adatto a essere incluso in un file includegraphics . Pertanto, credo che la soluzione più semplice sia quella di creare il proprio qrcode all'interno di un comando standalone e usare il risultato come foto in moderncv.

%File qrcode.tex -> qrcode.pdf
documentclass{standalone}
usepackage{qrcode}
begin{document}
qrcode[hyperlink,height=64pt]{http://www.ctan.org}
end{document}

Immettere la descrizione dell'immagine qui

documentclass[11pt,a4paper,sans]{moderncv}
moderncvstyle{classic}
usepackage{qrcode}
usepackage{graphicx}

firstname{John}
familyname{Doe}

address{83 Fancy Avenue}{Noweheresville}{Gotham City 24061} 
phone[mobile]{123 456 7890}
email{[email protected]}

photo[64pt][0.5pt]{qrcode}

begin{document}
   makecvtitle
end{document}

Immettere la descrizione dell'immagine qui

Aggiornamento: tutto in uno 😉

Con filecontents e un pacchetto immediate è possibile unire entrambi i file in uno e compilarli insieme:

documentclass[11pt,a4paper,sans]{moderncv}
moderncvstyle{classic}
usepackage{qrcode}
usepackage{filecontents}

begin{filecontents*}{myqrcode.tex} %<- This is the qrcode file name
documentclass{standalone}
usepackage{qrcode}
begin{document}
qrcode[hyperlink,height=64pt]{http://www.ctan.org}
end{document}
end{filecontents*}

immediatewrite18{pdflatex myqrcode.tex}

firstname{John}
familyname{Doe}

address{83 Fancy Avenue}{Noweheresville}{Gotham City 24061} 
phone[mobile]{123 456 7890}
email{[email protected]}

photo[64pt][0.5pt]{myqrcode} %<- Insert previous name

begin{document}
   makecvtitle
end{document}

Nel codice della classe moderncv, lo stile classic si può trovare un costrutto if-then-else che controlla se una classe photo è definito (stampandolo) o no (non facendo nulla). Ho aggiunto all'interno del caso vuoto un nuovo test if-then-else, se un nuovo comando qrphoto è definito. Se è definito, il codice lo stampa, mentre nell'altro caso non fa nulla.

Il nuovo comando per il comando qrphoto è:

NewDocumentCommand{qrphoto}{O{64pt}O{0.4pt}m}{def@qrphotowidth{#1}def@qrphotoframewidth{#2}def@qrphoto{#3}}

Con questo comando definisco i valori necessari @qrphotowidth ecc. per un uso successivo.

Ora possiamo modificare il comando originale con

patchcmd{makecvhead}%
  {%
    ifthenelse{isundefined{@photo}}{}%
  }% code to patch
  {% new code <=========================================================
    ifthenelse{isundefined{@photo}}%
      {%
        ifthenelse{isundefined{@qrphoto}}%
        {}%
        {%
          [email protected]%
            hspace*{separatorcolumnwidth}fi%
          color{black}% <======================== to get a black qrcode
          setlength{fboxrule}{@qrphotoframewidth}%
          ifdim@qrphotoframewidth=0pt%
            setlength{fboxsep}{0pt}fi%
          raisebox{1cm}{framebox{qrcode[hyperlink,height=@qrphotowidth]{@qrphoto}}} 
        }
      }%
  }% end new code <=====================================================
  {}% success
  {fail}% failure

Il comando raisebox[1cm] è necessario per ottenere il codice qr nella giusta posizione (non ho cercato il motivo per cui è necessario qui. Il valore utilizzato va bene per dimensioni del codice qr risultante di 2 cm (che ho usato per il codice di esempio) o più. Se il vostro codice qr deve essere più piccolo, dovete cambiare il valore usato di 1cm a un valore inferiore. Dovrete fare delle prove.

Come potete vedere, ho eliminato il comando includegraphics. Con il comando qrphoto qrcode... dal pacchetto qrcode.

Con il comando

qrphoto[2cm][0.5pt]{https://tex.stackexchange.com/questions/474546/}

ad esempio, si può aggiungere un'immagine qr-code con un'altezza e una larghezza di 2cm, una cornice intorno ad essa con una linea di 0.5pt e il contenuto del qr-code-image è https://tex.stackexchange.com/questions/474546/ (questa domanda).

Quindi con il seguente MWE completo

documentclass[11pt,a4paper,sans]{moderncv}

moderncvstyle{classic}

usepackage{graphicx}
usepackage{qrcode}

firstname{John}
familyname{Doe}

address{83 Fancy Avenue}{Noweheresville}{Gotham City 24061} 
phone[mobile]{123 456 7890}
email{[email protected]}

makeatletter
NewDocumentCommand{qrphoto}{O{64pt}O{0.4pt}m}{def@qrphotowidth{#1}def@qrphotoframewidth{#2}def@qrphoto{#3}}
% to patch the code of moderncv, version 2.0.0
%usepackage{etoolbox} % already loaded in moderncv <===================
patchcmd{makecvhead}%
  {%
    ifthenelse{isundefined{@photo}}{}%
  }% code to patch
  {% new code <=========================================================
    ifthenelse{isundefined{@photo}}%
      {%
        ifthenelse{isundefined{@qrphoto}}%
        {}%
        {%
          [email protected]%
            hspace*{separatorcolumnwidth}fi%
          color{black}% <======================== to get a black qrcode
          setlength{fboxrule}{@qrphotoframewidth}%
          ifdim@qrphotoframewidth=0pt%
            setlength{fboxsep}{0pt}fi%
          raisebox{1cm}{framebox{qrcode[hyperlink,height=@qrphotowidth]{@qrphoto}}} 
        }
      }%
  }% end new code <=====================================================
  {}% success
  {fail}% failure
makeatother

%photo[64pt][0.5pt]{example-image}
qrphoto[2cm][0.5pt]{https://tex.stackexchange.com/questions/474546/} % 

begin{document}
  makecvtitle
end{document}

si ottiene il seguente risultato:

PDF risultante

Si noti che è possibile stampare solo una foto o un codice qr. Se si dispone di un codice definito photo e qrphoto viene stampata solo la foto!

Valutazioni e commenti

Puoi aggiungere valore al nostro contenuto informativo collaborando con la tua esperienza nelle recensioni.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.