Dobrý způsob, jak vytvořit \ textová čísla?

Tato otázka vedla k novému balíčku:
circledsteps

Snažím se vytvořit pěkná čísla v kruhu pomocí jednoduchého příkazu:

\textcircled{1} 

Kruh je však svisle zarovnaný s číslem a vypadá trochu nedbale:

alternativní text

Jakékoli návrhy, jak lze Upravím svislé zarovnání tak, aby čísla vypadala více soustředěná na kruhy? Nebo, pokud to není možné, jaké další způsoby, jak dosáhnout stejných výsledků, jsou možné?

Použiji pouze tyto pro čísla a na velmi málo místech, takže je možné ruční nastavení na glyf.

Používám pdfLaTeX s Computer Modern, pokud na tom záleží.

Komentáře

  • Zde mám dvě dobré odpovědi, na méně než 30 minut utes (vy jste rychlí!). ‚ Pravděpodobně vytvořím komunitní wiki odpověď shrnující všechny možnosti jedné z těchto dnů, možná se mezitím objeví nějaká další řešení.
  • I ‚ m spánku, proto ‚ proč!
  • Jaký balíček poskytuje \textcircled?
  • @Matthew: Zdá se, že je to zabudováno do LaTeXu. Funguje po vybalení z krabice.
  • Můžete použít Unicode. U + 2460-2473 pro 1 až 20, U + 24EA pro 0, U + 3251-325F pro 21-35 a U + 32B1-32BF pro 36-50.

Odpověď

Zde je řešení TikZ:

\documentclass{article} \usepackage{tikz} \newcommand*\circled[1]{\tikz[baseline=(char.base)]{ \node[shape=circle,draw,inner sep=2pt] (char) {#1};}} \begin{document} Numbers aligned with the text: \circled{1} \circled{2} \circled{3} end. \end{document} 

alternativní text

Je to jen uzel. Možnosti TikZ se používají k zarovnání základní čáry, úpravě velikosti a získání tvaru kruhu. Můžete si svobodně vybrat další možnosti týkající se velikosti nebo tloušťky kruhu (volba thick). Je toho více: uzly můžete například pojmenovat jiným argumentem a spojit je pomocí šipek později.

Pokud ho chcete použít například pro výčet, je to snadné, ale musíte ho chránit:

\usepackage{enumitem} ... \begin{enumerate}[label=\protect\circled{\arabic*}] \item First item \item Second item \item Third item \item Fourth item \end{enumerate} 

alternativní text

Komentáře

  • Sladký příklad! V minulosti jsem měl problémy s používáním Vložené příklady TikZ, ale teď vidím, že je to vyřešeno baseline=(char.base). Super.
  • @Stefan: možná byste měli nahradit \newcommand by \DeclareRobustCommand, \protect již není potřeba, což je uživatelsky přívětivější.
  • Pak byste měli použít \ newcommand k prohlášení prázdné pěsti příkazu a poté použít \ DeclareRobustCommand. Tímto způsobem existující příkaz způsobí chybu.
  • @LuisFelipeVillavicencioLopez Jistě! Komentáře jsou není to nejlepší pro diskuse o kódu. Možná pošlete novou otázku nebo nechte ‚ s mluvit v komunitě LaTeX , kde zveřejňuji každý den.
  • To je hezké, ale problém je, že jej ‚ nelze použít uvnitř \tikzpicture — jako, pro například text uzlu nebo štítek. Existuje nějaké řešení pro “ univerzální “ pěkná zakroužkovaná čísla? Informace naleznete v tex.stackexchange.com/questions/496348/…

Odpověď

Byl jsem příjemně překvapen, kolik lidí se rozhodlo to zkusit, a objevilo se mnoho zajímavých řešení. Podle tradice bude touto odpovědí komunitní wiki a bude shrnovat a porovnávat všechna navrhovaná řešení.


Navrhuji tímto tři různá hodnotící kritéria, každé s hodnocením od 1 do 5:

  • Jednoduchost . Jedná se o opatření, jak snadné je použít navrhované řešení. Body odečtené za použití dalších balíčků nebo za definování čehokoli jiného než jednoduchého makra pro pohodlí.
  • Flexibilita . To zahrnuje především to, jak snadné je použít v jiných kontextech, v tomto případě různých tvarech, velikostech a tloušťkách rámů.
  • Přesnost . Jednoduše řečeno, jak esteticky řešení vypadá, zejména to, jak dobře je glyf centrován v kruhu a jak zapadá do okolního volně běžícího textu.

Tady to máme:

  1. Řešení raisebox.

    Díky Jimi Oke za rychlé prsty. Toto přišlo jako první a je to ten, který se mi obzvlášť líbí pro aplikaci, kterou jsem měl na mysli. Je to tak snadné jako:

    \raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {8}}} 

    Nic víc. Z hlediska jednoduchosti to není o nic lepší než toto.Solid 5/5 , protože nejsou potřeba žádné další balíčky a nepraktická definice může být triviálně abstrahována v jedné linii \def.

    Flexibilně je toto řešení poměrně nízké, protože nemáte žádnou kontrolu nad velikostí kruhu ani parametry (jsem si jist, že by někteří hackeři TeXu dokažte, že se mýlím, ale pro lásku k $ DEITY nás ušetřte takových ohavností). 2/5 si zde zaslouží. {1}

    Problém s přesností je jako vždy subjektivní, ale musíte si pohrát se svislými vzdálenostmi, abyste jej dostali správně ™ pro písmo, které vybrali. 2/5 .

  2. ding -y řešení.

    Toto přišlo z TH. , což naznačuje použití některých předdefinovaných symbolů glyfů. Vševědoucí symboly -4 dokument říká, že Jedinou skutečnou cestou, jak to udělat, je použít:

    \usepackage{pifont} \ding{172}--\ding{181} % seriffed fonts \ding{192}--\ding{201} % sans-seriffed fonts 

    Nebo dokonce názvosloví Go board:

    \usepackage{igo} \whitestone{1}--\whitestone{99} 

    Na straně jednoduchosti je sazba 4,5 / 5 , i když se zdráhám dát mu přísných 5 kvůli zapojeným dalším balíčkům.

    Toto není vůbec flexibilní. Pokud se vám nelíbí glyfy, jste sami. 1/5 .

    Samotné glyfy jsou dobře navržené, jak by se dalo očekávat, a čísla jsou vizuálně dobře zarovnaný s kruhy. I když máte písmo typu aa odlišným stylem, písmo čísel nemusí dobře zapadat do textu.

  3. Povinné tikz řešení.

    Ahh, vždy to tak je, to není. Je to kvůli Stefanovi Kottwitzovi .

    \usepackage{tikz} \newcommand*\circled[1]{\tikz[baseline=(char.base)]{ \node[shape=circle,draw,inner sep=2pt] (char) {#1};}} \begin{document} Numbers aligned with the text: \circled{1} \circled{2} \circled{3} end. \end{document} 

    Osobně nejsem do tikz (vím , Měl bych se to naučit jeden z těchto dnů), takže jít s tím by pro mě bylo jednorázové použití balíčku, kterému bych se rád vyhnul. Nemohu zde dát více než 2/5 , ale tikz fanboiz (a galz!) by to měl narazit až na 4/5 .

    Jak pokud jde o flexibilitu: toto je skutečná dohoda. Stefan předvedl, jak používat symboly v kroužku se všemi vyjmenovanými seznamy. Určitě jsou možné různé tvary rámečků s různým stupněm přizpůsobení kolem glyfů. Nesporné 5/5 .

    Zarovnání základní úrovně je prvotřídní, aniž byste si museli pohrávat s některými manuálními úpravami, což je docela hezké. Mezery kolem symbolu vypadají dobře, i když ve volně běžícím textu by kruh měl být nejlépe těsnější kolem čísla, čehož lze dosáhnout hraním s parametrem inner sep v definice příkazu. 5/5 zde.

  4. pict2e / picture řešení

    Pozdní přírůstek od Herberta navrhuje použití některých základních primitiv z balíčků picture a pict2e. Tady je:

    \usepackage{pict2e,picture} \newsavebox\CBox \newlength\CLength \def\Circled#1{\sbox\CBox{#1}% \ifdim\wd\CBox>\ht\CBox \CLength=\wd\CBox\else\CLength=\ht\CBox\fi \makebox[1.5\CLength]{\makebox(0,1.5\CLength){\put(0,0){\circle{1.5\CLength}}}% \makebox(0,1.5\CLength){\put(-.5\wd\CBox,0){#1}}}} 

    Z hlediska jednoduchosti to příliš nehodnotí. Vypadá to trochu spletitě, i když po jeho prostudování rozhodně srozumitelně a používá dva další balíčky. 2/5 je zde rozumné skóre.

    Flexibilita není zcela postavena – dovnitř, ale je to určitě možné. Poloměr kruhu lze upravit úpravou faktoru 1.5 a lze upravit základní linku. 3,5 / 5 .

    Jak je uvedeno v této definici, účaří okolního textu je tečna ke kruhu, místo aby byla zarovnána s kroužkem číselná základna. To může být za určitých okolností žádoucí, ale čísla tímto způsobem vypadají trochu na místě. Lepších výsledků lze dosáhnout pomocí některých dalších výpočtů při umisťování polí a 3,5 / 5 k reflek Tento potenciál.

  5. Další povinné tikz řešení

    Matthew Leingang a morbusg si to vyzkoušeli, a i když je jejich úsilí jistě oceněno, mám pocit, že Stefanovo řešení je jednodušší. Jsem vděčný za vynaložené úsilí (a vaši pokoru) a hlasoval jsem pro obě vaše odpovědi.

Konečné skóre:

  • Jednoduchost : raisebox
  • Flexibilita : tikz
  • Přesnost : svázáno mezi tikz a ding

Celkově: tikz bez váhání ( aklamace od veřejnosti, házené klobouky, mávané kapesníky a tak dále).

Nakonec nějaký testovací kód:

\documentclass{article} \usepackage{pict2e,picture} % picture \usepackage{tikz} % tikz \usepackage{pifont} % ding % Picture solution \newsavebox\CBox \newlength\CLength \def\numcircledpict#1{\sbox\CBox{#1}% \ifdim\wd\CBox>\ht\CBox \CLength=\wd\CBox\else\CLength=\ht\CBox\fi \makebox[1.5\CLength]{\makebox(0,1.5\CLength){\put(0,0){\circle{1.5\CLength}}}% \makebox(0,1.5\CLength){\put(-.5\wd\CBox,0){#1}}}} % TikZ solution \newcommand*\numcircledtikz[1]{\tikz[baseline=(char.base)]{ \node[shape=circle,draw,inner sep=1.2pt] (char) {#1};}} % Modified \textcircled solution \newcommand*\numcircledmod[1]{\raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {#1}}}} \begin{document} \begin{tabular}{l|l} Original & Lorem \textcircled{1} ipsum \textcircled{2} dolor \\ Modified & Lorem \numcircledmod{1} ipsum \numcircledmod{2} dolor\\ TikZ & Lorem \numcircledtikz{1} ipsum \numcircledtikz{2} dolor\\ Picture & Lorem \numcircledpict{1} ipsum \numcircledpict{2} dolor\\ Ding serif & Lorem \ding{172} ipsum \ding{173} dolor\\ Ding sans & Lorem \ding{192} ipsum \ding{193} dolor\\ \end{tabular} \end{document} 

{1} Pokud se někdo rozhodne rozhodnout napsat takovou věc, dejte mi vědět a já ji do této odpovědi zahrnu bez dalších nákladů, ale mějte na paměti, že příspěvek bude následně označen \textcircled{18+} k ochraně slabých.

Komentáře

  • vynikající shrnutí, výborně! Díky takovým příspěvkům je tento web užitečný.
  • @Yiannis Už ‚ byl nějaký čas, co jsem zveřejnil otázku, ale našel jsem si čas právě teď na vyleštění shrnutí. Doufám, že to bude užitečné pro lidi se stejným problémem.
  • Říkáte, “ Mezery kolem symbolu vypadají dobře, i když ve volném běhu text, který by kruh měl mít přednostně těsnější kolem čísla. “ To lze snadno opravit změnou inner sep=2pt na inner sep=1pt v definici příkazu \circled.
  • @Matt: Jistě – mým záměrem zde bylo poukázat na estetický problém, ale myslím Nebyl jsem ‚ v tom úplně jasný. Informace o tom, co je třeba změnit, jsou nyní zmíněny v příspěvku. Díky.
  • @MartinTapankov Problém je vyřešen pomocí raiseboxu za předpokladu, že každému hovoru předchází \ protect.

Odpověď

Nejrychlejší opravou by bylo použití příkazu \raisebox. Trochu jsem si s tím pohrál a zdá se, že snížení textu o 0,9 bodu dá postavu přibližně do středu:

 \textcircled{\raisebox{-0.9pt}{8}} 

Dalo by se hrát s ním získat absolutní střed, ale je to rozhodně mezi 0,9 a 1 bodem. Nápad jsem dostal zde . Zdá se, že příkaz \textcircled funguje nejlépe pro text! Ale každopádně by to mělo váš problém vyřešit.

Komentáře

  • To se ‚ změní základní čísla, která nemusí být žádoucí. Ale možná díky vnějšímu \raisebox ke zvýšení celého zakroužkovaného čísla by bylo možné udržovat základní linie.
  • Mais oui! Měl jsem na to myslet sám. Dík! ‚ Budu trochu čekat na další návrhy, než to označím jako přijaté.
  • @TH. Je pravda, ale to pro mě ‚ nezáleží – čísla se neobjevují ve volně běžícím textu, ale jsou spíše hlavičkami sloupců tabulky nebo slouží k označení.
  • Ale výstup \textcircled ve skutečnosti již má nižší základní linii s \raisebox. Pokud tedy autor upřednostňuje vše v jedné rovině, měl by jít na pifont. U vnějšího \raisebox je maximum zvýšení o 0,5 bodu, čímž se kruh vrátí do původní polohy, která však neodpovídá textu. Zvýšení všeho nad 0,5 bodu začne posouvat číslo, nikoli kruh, čímž se vyvrátí počáteční úsilí. Pokud tedy autor chce dobrý \textcircled, pak zde ‚ jeden: \raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {8}} } . To je ve skutečnosti docela dobré.
  • @Martin: můžete také obdržet návrh TikZ. 😉

Odpověď

morbusg již zmíněn že některá písma mají obklopená čísla jako Unicode glyfy a ukazují, jak je přímo vložit. Některá písma poskytují uživatelsky přívětivější rozhraní pro přístup k číslům, např. Linux Libertine a Junicode. To samozřejmě znamená, že se odchylujeme od vašeho požadavku používat Computer Modern. Výhodou těchto čísel Unicode je pravděpodobně to, že byla vytvořena návrhářem písem, takže by nemělo být nutné dolaďování.

Tady je jednoduchý proof-of-concept (musíte také mít nainstalovaný junicode balíček):

\documentclass{article} \usepackage{fontspec} \usepackage{libertine} \begin{document} \libertineGlyph{uni2460} \libertineGlyph{uni24F5} \libertineGlyph{uni2776} {\fontspec[Ligatures=Discretionary]{Junicode}[1] [[1]] <1>} \end{document} 

výstup

Tyto metody jsou popsány v příslušných dokumentacích.

Zde je ještě pohodlnější způsob přístupu k těmto množinám čísel. Dvojitě zakroužkovaná čísla jsou (na Unicode) k dispozici od 1 do 10, ostatní od 0 do 20.

\documentclass{article} \usepackage{fontspec} \usepackage{libertine} \usepackage{pgf} % for the calculation % \libcirc and \libcircblk display their "0" if the parameter is out of range \newcommand{\libcirc}[1]{\pgfmathparse{ ifthenelse(#1 > 0 && #1 < 21, Hex(9311+#1), Hex(9450) }\libertineGlyph{uni\pgfmathresult}} \newcommand{\libcircdbl}[1]{\pgfmathparse{Hex(9460+#1)}\libertineGlyph{uni\pgfmathresult}} \newcommand{\libcircblk}[1]{\pgfmathparse{ ifthenelse(#1 > 0 && #1 < 11, Hex(10101+#1), ifthenelse(#1 > 10 && #1 < 21, Hex(9450-10+#1), Hex(9471) ) ) }\libertineGlyph{uni\pgfmathresult}} \newcommand{\juncirc}[1]{{\fontspec[Ligatures=Discretionary]{Junicode}[#1]}} \newcommand{\juncircdbl}[1]{{\fontspec[Ligatures=Discretionary]{Junicode}[[#1]]}} \newcommand{\juncircblk}[1]{{\fontspec[Ligatures=Discretionary]{Junicode}<#1>}} \usepackage{pgffor} % just for the demo loop \setlength{\parindent}{0pt} % just for the demo \begin{document} \section{Linux Libertine} \foreach \x in {0,...,20} {\libcirc{\x} } \foreach \x in {1,...,10} {\libcircdbl{\x} } \foreach \x in {0,...,20} {\libcircblk{\x} } \section{\fontspec{Junicode}Junicode} \foreach \x in {0,...,20} {\juncirc{\x} } \foreach \x in {1,...,10} {\juncircdbl{\x} } \foreach \x in {0,...,20} {\juncircblk{\x} } \end{document} 

výstup

Komentáře

  • Myslím, že to nefunguje s pdflatex.
  • @moose Ano .. Musím zkontrolovat, zda první bit kódu funguje s aktuálním libertine vůbec (ale pdfLaTeX by měl být v pořádku), druhý bit je pouze XeLaTeX / LuaLaTeX, měl bych to uvést také v odpovědi.

Odpověď

PGF je u této aplikace přehnané, ale pokud ji již máte načten, můžete ji použít:

\documentclass{article} \usepackage{tikz} \newcommand{\pgftextcircled}[1]{ \setbox0=\hbox{#1}% \dimen0\wd0% \divide\dimen0 by 2% \begin{tikzpicture}[baseline=(a.base)]% \useasboundingbox (-\the\dimen0,0pt) rectangle (\the\dimen0,1pt); \node[circle,draw,outer sep=0pt,inner sep=0.1ex] (a) {#1}; \end{tikzpicture} } \newcommand{\pangram}{\noindent{The \textcircled{0} quick \textcircled{1} brown \textcircled{2} fox \textcircled{3} jumps \textcircled{4} over \textcircled{5} the \textcircled{6} lazy \textcircled{7} dog.} } \begin{document} \begin{minipage}{0.5\textwidth} \pangram \bigskip \let\textcircled=\pgftextcircled \pangram \end{minipage} \end{document} 

výstup úryvků

Jak můžete vidět, v kruzích je prostor navíc oproti \textcircled ale není to špatné.

pre-post editace: Vidím, že mě Stefan a morbusg zmlátili. No dobře.

Komentáře

  • Myslím, že externí proces je opravdu přehnaný na něco, co lze v LaTeXu provést. Můžete jej jednoduše zkonstruovat jako \ newcommand {\ Ring} [1] {\ raisebox {-1pt} {\ begin {tabular} {@ {} c @ {}} {\ small # 1} \ [ -11,5pt] \ BigCircle \ end {tabular}}}. Automatické přizpůsobení rozměrů je ponecháno jako cvičení na čtenáři 🙂
  • Peter, jaký externí proces?
  • @ u0b34a0f6ae: Myslím, že Peter odkazuje na skutečnost, že tikz používá spoustu \special příkazů přidaných poté, co TeX zpracuje vstup. ‚ Je to „externí“ pro normální trávicí systém TeX.

Odpovědět

Ze souboru symbols.pdf to vypadá, že pifont může dělat, co chcete, pomocí \ding{172}\ding{181} nebo \ding{192} prostřednictvím \ding{201}.

Nebo igo balíček s \whitestone{1}\whitestone{99}, i když to je určeno pro sazbu desek Go.

Zdá se, že řešení bylo nalezeno, ale zde je jednoduché srovnání.

\documentclass{article} \usepackage{pifont} \def\X#1{% #1% \textcircled{#1}% \raisebox{.9pt}{\textcircled{\raisebox{-.9pt}{#1}}}% \ding{\numexpr171+#1\relax}% } \begin{document} \X0\X1\X2\X3\X4\X5\X6\X7\X8\X9 \end{document} 

sem zadejte popis obrázku

Komentáře

  • Toto je skvělé řešení. Pifonty jsou však ve srovnání s výstupem \textcircled poněkud přeplněné. Pro je to, že písma jsou v jedné rovině s textem, což může být pro autora dobré.
  • @TH: Pěkné. Co dělá balíček textcomp?
  • @Jimi: Myslel jsem, že je to nutné pro \textcircled. Mýlil jsem se. (Díval jsem se na tabulku 17 souboru Symbols.pdf a uvádí, že textcomp je vyžadován pro \newtie, ale nebyl jsem ‚ Čtu dostatečně pečlivě.)

Aktualizoval jsem kód.

  • @PatrickT Díky za obrázek. ‚ je dobrým doplňkem.
  • Odpověď

    The mathdesign definuje \figurecircled, který má lepší mezery pro čísla než \textcircled ano.

    Balíček mathdesign je nekompatibilní s amsfonts a amssymb ale pokud stejně používáte písmo mathdesign, není to problém.

    Komentáře

    • Tato odpověď byla zamítnuta? Mohl by kdokoli to vysvětlit, proč si myslí, že je to špatné řešení problému?
    • Nechtěl jsem vás ‚ odmítnout, ale dostal jsem chybu s jednoduchým testovací soubor. Můžete poskytnout MWE? Moje chybová zpráva: ! TeX capacity exceeded, sorry [input stack size=5000]. \figurecircled ->\MDB-cmd \figurecircled \MDB\figurecircled l.14 ...footnote{of the emergency} $\figurecircled {1}$ ! ==> Fatal error occurred, no output PDF file produced!

    Odpověď

    @Stefan “ Odpověď je dobrá, ale vylepšil jsem jeho odpověď.

    Za prvé, pokud jsou \circled{1} a \circled{10} umístěny společně , tyto dva kruhy nebudou mít stejnou velikost, proto jsem do příkazu \circled přidal volitelný parametr. Volitelný parametr byl přeřazen jako zástupný symbol, aby se zajistilo, že se tyto kruhy objeví v stejná velikost.

    Navíc, protože jsem použil \ifblank, který poskytuje balíček etoolbox, ke kontrole, zda byl poskytnut volitelný parametr, Použil jsem \robustify, aby byl příkaz robustní. To obejde nevýhodu používání \DeclearRobustCommand, kterou zmiňuje @Stefan v komentáři své odpovědi. \protact tedy již není potřeba.


    Kód:

    \documentclass{article} \usepackage{enumitem} \usepackage{tikz} \usepackage{etoolbox} \newcommand{\circled}[2][]{% \tikz[baseline=(char.base)]{% \node[shape = circle, draw, inner sep = 1pt] (char) {\phantom{\ifblank{#1}{#2}{#1}}};% \node at (char.center) {\makebox[0pt][c]{#2}};}} \robustify{\circled} \begin{document} \mbox{}\rlap{\rule{.7\linewidth}{.4pt}}% The original version: \circled{1} and \circled{10}. \mbox{}\rlap{\rule{.7\linewidth}{.4pt}}% The improved version: \circled[10]{1} and \circled[10]{10}. \newcommand{\dcircled}[1]{\circled[00]{#1}} \begin{enumerate}[label=\dcircled{\arabic*}, noitemsep] \item I \item am \item happy \item to \item join \item with \item you \item today \item in \item what \item will \item go \item down \item in \item history \item as \item the \item greatest \item demonstration \item for \item freedom \item in \item the \item history \item of \item our \item nation. \end{enumerate} \end{document} 

    Výsledek:

    Komentáře

    • znáte možnost minimum size pro uzly?
    • @percusse Omlouváme se, ale Nerozumím vám ‚.
    • Můžete definovat minimální velikost pro uzly kruhu bez rámečku nebo fantomu s jednotnou velikostí.
    • @percusse To je ‚ dobrý návrh , nicméně, nemyslím si ‚ že rozumíte myšlence v mém příspěvku. Navrhl jsem tento volitelný parametr pro jednotnou velikost kruhů, protože různě velké kruhy, které jsou zarovnány dohromady, budou vypadat nepřátelsky.

    Odpovědět

    Ještě jednodušší:

    \textcircled{\small{2}} 

    nebo

    {\large \textcircled{\small 2}} 

    nebo

    {\Large \textcircled{\normalsize 2}} 

    [vyd. Segletes poskytující MWE & obrázek]

    \documentclass{article} \usepackage{enumitem} \begin{document} \begin{enumerate}[label=\large\protect\textcircled{\small\arabic*}] \item First item \item Second item \item Third item \item Fourth item \end{enumerate} \textcircled{\small{2}} or {\large \textcircled{\small 2}} or {\Large \textcircled{\normalsize 2}} \end{document} 

    LaTeX vykreslení výše uvedeného souboru .tex

    Komentáře

    • Toto může fungovat, když kruh není obklopen textem a velikost písma čísla není problém – ale já ‚ raději použiji jedno z dalších řešení místo toho.
    • Můžeme převrátit barvy uvnitř kruhu?

    Odpovědět

    toto odpověď byla převedena v balíčku na CTAN: https://ctan.org/pkg/circledsteps

    Odpovědi jsou všechny pěkné, a zejména ten tikz je velmi konfigurovatelný. Ale má problém: nemůžete jej bezpečně použít v jiných tikzpicture s. Takže jsem spojil několik věcí a implementoval toto:

     \documentclass{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{tikz} \makeatletter % Based on https://tex.stackexchange.com/questions/7032/good-way-to-make-textcircled-numbers % \usepackage{pict2e,picture} \pgfkeys{/csteps/inner ysep/.initial=4pt, /csteps/inner xsep/.initial=4pt, /csteps/inner color/.initial=red, /csteps/outer color/.initial=blue, } \newsavebox\csteps@CBox \newlength\csteps@XLength \newlength\csteps@YLength \newlength\csteps@YDepth \newlength\csteps@tmplen \def\csteps@CircledParam#1#2{\sbox\csteps@CBox{#2}% \csteps@XLength=\wd\csteps@CBox\advance\csteps@XLength by\pgfkeysvalueof{/csteps/inner xsep}\relax \csteps@tmplen=\pgfkeysvalueof{/csteps/inner ysep}\relax \csteps@YDepth=\dp\csteps@CBox\advance\csteps@YDepth by 0.5\csteps@tmplen\relax \csteps@YLength=\ht\csteps@CBox\advance\csteps@YLength by\dp\csteps@CBox\advance\csteps@YLength by\pgfkeysvalueof{/csteps/inner ysep}\relax \typeout{DBG:#2\space X\space\the\csteps@XLength\space Y:\the\csteps@YLength\space D:\the\csteps@YDepth}% \raisebox{-#1\csteps@YDepth}{% \ifdim\csteps@XLength>\csteps@YLength \makebox[\csteps@XLength]{% X bigger than Y \makebox(0,\csteps@YLength){% \color{\pgfkeysvalueof{/csteps/outer color}}\put(0,0){\oval(\csteps@XLength,\csteps@YLength)}% }% \makebox(0,\csteps@YLength){% \put(-.5\wd\csteps@CBox,0){\textcolor{\pgfkeysvalueof{/csteps/inner color}}{#2}}% }}% \else \makebox[\csteps@YLength]{% \makebox(0,\csteps@YLength){% \color{\pgfkeysvalueof{/csteps/outer color}}\put(0,0){\circle{\csteps@YLength}}% }% \makebox(0,\csteps@YLength){% \put(-.5\wd\csteps@CBox,0){\textcolor{\pgfkeysvalueof{/csteps/inner color}}{#2}}% }}% \fi }% } \def\Circled#1{\csteps@CircledParam{1}{#1}} \def\CircledTop#1{\csteps@CircledParam{0}{#1}} \makeatother \begin{document} This is normal text \Circled{1} is on the baseline, \CircledTop{2} is on top. \par\bigskip This is more evident if you have descendent, like p:\Circled{p} and \CircledTop{p}. \par\bigskip For big horizontal things it becomes oval: \Circled{200} or \CircledTop{199}. \par\bigskip Inside \texttt{tikz} \begin{tikzpicture}[scale=0.8, rotate=30, text width=3cm, transform shape] \node [draw,color=green!50!black]{text \Circled{1}}; \end{tikzpicture} \par\bigskip \tikzset{/csteps/inner ysep=10pt} \tikzset{/csteps/inner xsep=10pt} More space: \Circled{1} \Circled{2} \Circled{p} \Circled{200} \Circled{199}. \end{document}  

    Příklad použití

    Komentáře

    • Vypadá skvěle! (+1)

    Odpovědět

    pomocí výchozích obrázkových příkazů:

    \documentclass{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{pict2e,picture} \newsavebox\CBox \newlength\CLength \def\Circled#1{\sbox\CBox{#1}% \ifdim\wd\CBox>\ht\CBox \CLength=\wd\CBox\else\CLength=\ht\CBox\fi \makebox[1.2\CLength]{\makebox(0,1.2\CLength){\put(0,0){\circle{1.2\CLength}}}% \makebox(0,1.2\CLength){\put(-.5\wd\CBox,0){#1}}}} \begin{document} \Huge foo \Circled{1} \Circled{2} \Circled{ABC} \end{document} 

    alternativní text

    Odpověď

    S prostým textem (náhodou na to narazil a zapamatoval si tuto otázku):

    \def\circled#1{{\ooalign{\hfil\lower.1ex\hbox{#1}\hfil\crcr\Orb}}} $\circled1 \circled2 \circled3 \ldots \circled9 \quad \circled{23}$ \bye 

    circlednums

    S XeTeX:

    \font\circled="Arial Unicode MS" {\circled ➀} Didn"t occur to me {\circled ➄} earlier that some fonts have {\circled ➇} these. \bye 

    Nebo možná s TikZ:

    \input tikz baseline ain"t so pretty \par baseline ain"t so pretty \par baseline \tikz \node[circle,draw] {2}; ain"t \par so pretty \tikz[baseline] \node[circle,draw] {2}; baseline \par ain"t so pretty baseline \par ain"t \tikz[inner sep=1pt,baseline=-.75ex] \node[circle,draw] {2}; so pretty \par baseline \tikz[inner sep=2pt,baseline=-.75ex] \node[circle,draw] {2}; ain"t so \par pretty baseline ain"t so \par pretty \tikz[inner sep=.25ex,baseline=-.75ex] \node[circle,draw] {2}; baseline \par ... actually, now it sorta is \par baseline ain"t so pretty \par baseline ain"t so pretty \bye 

    mg src =“ https://i.imgur.com/LAqbN.png „alt =“ „title =“ Hostitelem imgur.com „/>

    Sakra, Stefan mě porazil tím hezčím.

    Odpověď

    Zde je \pdfliteral řešení. Funguje pouze pro jednotlivá čísla.

    \def\circled#1{% #1% \pdfliteral{ q .5 w 10 0 0 10 -2.5 3.5 cm .05 w .5 0 m .5 .276 .276 .5 0 .5 c -.276 .5 -.5 .276 -.5 0 c -.5 -.276 -.276 -.5 0 -.5 c .276 -.5 .5 -.276 .5 0 c h S Q }% } \circled{1} a \circled{2} b \circled{3} c \circled{10} \bye 

    sem zadejte popis obrázku

    komentáře

    • Proč transformace souřadnic?
    • @percusse Ve skutečnosti jsem zkopíroval kód sem a trochu ho upravil. Pokud můžete poskytnout nějaké zdroje, abyste se dozvěděli více o kódování PDF, byl bych opravdu šťastný.
    • Je to vlastně PostScript, ale PDF také podporuje mnoho grafických objektů. Je tedy ‚ trochu těžkopádné porozumět množině všech operátorů podporovaných v PDF. Ale alespoň pro začátek čtení tohoto kódu můžete použít referenční příručku adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/… . Také ve specifikaci ISO (tabulka 59 v adobe.com/devnet/pdf/pdf_reference.html ) můžete rozpoznat operátory TikZ namapované na frontend;). Prvním problémem, který je třeba uchopit, je nastavení ohraničovacího rámečku, zbytek je obvyklá notace PS.

    Odpověď

    Použití Balíček a symboly pifont a symboly od \ding{172} do \ding{211} snadno máte velmi vynikající čísla v kroužku, ale pokud chcete kroužkovat čísla větší než 10 máme problém. Jak zde ukázali další uživatelé stackexchange, můžeme problém vyřešit, pokud čísla nejsou příliš velká, ale věci se zhoršily (složité LaTeX kódy) a můžeme mít problémy, pokud píšeme do textu (pokud se kruh zvětšil, LaTeX může být nuceni zvětšit prostor mezi řádky, nebo možná překrýt kruh na sousedních horních a dolních řádcích): věci jsou o něco jednodušší, pokud chceme v seznamu položek pouze zakroužkované číslo. Tento nedostatek flexibility by mohl být v některých případech nepříjemný. Zdá se, že rozumné řešení používá balíček tcolorbox : po pokusech jsem zjistil, že do preambule musíme jednoduše přidat toto

    \usepackage{tcolorbox} \newcommand{\ciao}[1]{{\setlength\fboxrule{0pt}\fbox{\tcbox[colframe=black,colback=white,shrink tight,boxrule=0.5pt,extrude by=1mm]{\small #1}}}} 

    a zavoláme v dokumentu příkaz \ ciao, když chceme „zakroužkované“ číslo (příklad: \ ciao {12} bude „zakroužkovat“ číslo 12). Mimochodem, použití fboxu v linii preambule je důležité, protože bez něj by zaoblená krabička mohla vyčnívat z linie vlevo nebo vpravo, když jsou na okraji linky: to by bylo velmi neestetické.

    Pokračování, v tomto řešení vidím 3 klady a 1 zápory:

    • klady : jednoduchý kód, dobrá práce i uvnitř textu, flexibilita (také velká čísla & pro případ, že bychom mohli snadno hrát s okraji nebo barvami: viz 0,5 bodu nebo černá & bílá v řádku preambule).
    • proti : nemáme kruhy, ale zaoblenou krabičku, ale považuji to za rozumný kompromis.

    Příkladem použití této metody je

    Quel ramo del lago di Como \ciao{1}, che volge a mezzogiorno, tra due catene \ciao{20} non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a restringersi, e a prender corso \ciao{252} e figura di fiume, tra un promontorio a destra, e un"ampia costiera dall"altra parte; \ciao{3432} e il ponte che ivi congiunge le due rive, par che renda ancor più sensibile all"occhio questa trasformazione, e segni il punto in cui il lago cessa, e l"Adda ricomincia, per ripigliar poi nome di lago dove le rive, allontanandosi di nuovo, lascian l"acqua distendersi e rallentarsi in nuovi golfi e in nuovi seni. 

    , která dává

    zde zadejte popis obrázku

    Upozorňujeme, že čísla nevyčnívají a že mezera mezi řádky je vždy stejná: bez ohledu na to, zda číslo máme nebo ne. Stručně řečeno, tato téměř zakroužkovaná čísla fungují velmi dobře, i když jsou uvnitř textu.

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *