如何创建带有竖排中文文本的节点

如何创建带有竖排中文文本的节点

我想创建一个节点,其中的中文文本是垂直书写的。当然,我不希望字符旋转!可以吗?

梅威瑟:

\documentclass[tikz]{standalone}
\usepackage[UTF8]{ctex}

\begin{document}

\begin{tikzpicture}
\node[draw,inner sep=2pt] at (0,0) {文章内容。};
\end{tikzpicture}

\end{document}

编辑:我正在使用PdfLaTeX并且只需要几个适合单个列的短垂直文本节点。

答案1

请使用 XeLaTeX 或 LuaLaTeX!

输出

\documentclass{article}
\usepackage{tikz}
\usepackage{fontspec}
\usepackage{expl3}
\setmainfont{FandolSong-Regular.otf}

\begin{document}

\ExplSyntaxOn

\cs_new:Npn \__map_function #1 {
    \tl_put_right:Nn \l_tmpa_tl {\noindent #1 \par}
}

\cs_new:Npn \__map_function_centering #1 {
    \tl_put_right:Nn \l_tmpa_tl {\centering #1 \par}
}

\newcommand{\verticaltext}[1]{
    \str_set:Nn \l_tmpa_str {#1}
    \tl_clear:N \l_tmpa_tl
    \str_map_function:NN \l_tmpa_str \__map_function
    \tl_use:N \l_tmpa_tl
}

\newcommand{\verticalcentertext}[1]{
    \str_set:Nn \l_tmpa_str {#1}
    \tl_clear:N \l_tmpa_tl
    \str_map_function:NN \l_tmpa_str \__map_function_centering
    \tl_use:N \l_tmpa_tl
}

\ExplSyntaxOff

\begin{tikzpicture}
\node[draw,inner sep=2pt,text width=7mm] at (0,0) {\verticaltext{文章内容。}};
\node[draw,inner sep=2pt,text width=7mm] at (1,0) {\verticaltext{abcde}};
\node[draw,inner sep=2pt,text width=7mm] at (2,0) {\verticalcentertext{文章内容。}};
\node[draw,inner sep=2pt,text width=7mm] at (3,0) {\verticalcentertext{abcde}};
\end{tikzpicture}


\end{document} 

答案2

一种 XeLaTeX 方法,请注意这是一种伪垂直排版。

\documentclass[tikz]{standalone}
\usepackage[UTF8]{ctex}

\tikzset{
  pseudo vertical/.style={
    % 1\ccwd is the width of one Chinese character, see user manual of ctex pkg
    text width=1\ccwd,
    % reduce line spacing and allow linebreak before Chinese period punct (。)
    % c.f. user manual of xeCJK pkg
    font=\linespread{1}\selectfont\xeCJKDeclareCharClass{CJK}{`。}
  }
}

\begin{document}
\begin{tikzpicture}
  \node[draw, inner sep=2pt, pseudo vertical] at (0,0) {文章内容。};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

我不会读写中文,所以我不知道这样写是否正确。

我只是为文本指定了一个宽度text width=1.5em,以便每个字符都可以一个接一个地显示。

在此处输入图片描述

\documentclass[tikz]{standalone}
\usepackage[UTF8]{ctex}

\begin{document}

\begin{tikzpicture}
\node[draw,inner sep=2pt,text width=1.5em] at (0,0) {文章内容。};
\end{tikzpicture}

\end{document}

答案4

您可以使用系统字体,例如 Noto 系列。这样您就不必受限于特定系统的特定字体包。

这个答案的变体使用了 tikz positioning,因此对于短文本很有用。

绿色中文

使用 xelatex\lualatex 进行编译。

平均能量损失

\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{xcolor}

\usepackage{fontspec}
\setmainfont{Noto Serif}
\newfontface\zhfont[Scale=2.5,Colour=blue]{Noto Serif SC}
\usepackage{lipsum}

\begin{document}
\ \marginpar{
\begin{tikzpicture}[inner sep=3pt,node distance=0mm,font={\zhfont}]
  \node (a) {文};
  \node (b) [below=of a] {章};
  \node (c) [below=of b] {内};
  \node (d) [below=of c] {容};
  \node (e) [below=of d] {。};
\end{tikzpicture}} \lipsum[2]\lipsum[2]
\end{document}

附录:

或者,问题使用 XeTeX 的竖排中文文本为具有该功能的字体提供“旋转字形”解决方案。它们所在的小页面框也会旋转,因此字符会垂直显示。

垂直的

这可以适应 tikz。

平均能量损失

\documentclass{article}

\usepackage{graphicx} % for \rotatebox

\usepackage{xeCJK}
\newfontlanguage{Chinese}{CHN}
\setCJKmainfont{Noto Serif CJK SC}
\setCJKfamilyfont{songvert}[RawFeature={vertical;+vert},Script=CJK,Language=Chinese,Vertical=RotatedGlyphs]{Noto Serif SC}
\setmainfont{Noto Serif}

\newcommand*\CJKmovesymbol[1]{\raise.35em\hbox{#1}}
\newcommand*\CJKmove{\punctstyle{plain}% do not modify the spacing between punctuations
  \let\CJKsymbol\CJKmovesymbol
  \let\CJKpunctsymbol\CJKsymbol}

\newcommand\sampletext{『文章内容』。}

\begin{document}

\sampletext\  This is some sample text.
\begin{center}
\rotatebox{-90}{\fbox{\begin{minipage}{10em}
\CJKfamily{songvert}\CJKmove
\sampletext \\
\sampletext \\
\sampletext \\
\sampletext \\
\end{minipage}}}
\end{center}
\sampletext\  This is some sample text.

\end{document}

内联的 tikz 节点,包含旋转的字形及其框:

垂直直列

平均能量损失

\documentclass{article}
\usepackage{xcolor}

\usepackage{graphicx} % for \rotatebox
\usepackage{tikz}

\usepackage{xeCJK}
\newfontlanguage{Chinese}{CHN}
\setCJKmainfont{Noto Serif CJK SC}
\setCJKfamilyfont{songvert}[RawFeature={vertical;+vert},Script=CJK,Language=Chinese,Vertical=RotatedGlyphs]{Noto Serif SC}
\setmainfont{Noto Serif}

\newcommand*\CJKmovesymbol[1]{\raise.35em\hbox{#1}}
\newcommand*\CJKmove{\punctstyle{plain}% do not modify the spacing between punctuations
  \let\CJKsymbol\CJKmovesymbol
  \let\CJKpunctsymbol\CJKsymbol}

\newcommand\sampletext{『文章内容』。}

\begin{document}

\sampletext\  This is some sample text.
\tikz \node {\rotatebox{-90}{\colorbox{red!4}{
\CJKfamily{songvert}\CJKmove
\sampletext}}};
\sampletext\  This is some sample text.

\end{document}

相关内容